被虐到麻木的代某

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#include <iostream>
#define maxd 10000

using namespace std;

struct Command//一条命令的所有内容包括于此
{
    char c[5];
    int r1, c1, r2, c2;
    int a, x[20];
}c***xd];

int r,c,n;//共几行几列几条命令

int simulate(int* r0, int* c0)
{
    for(int i = 0 ; i < n ; i++)
    {
        if(cmd[i].c[0] == 'E')
        {//如果交换到了我(r0,c0)头上
            if(cmd[i].r1 == *r0 && cmd[i].c1 == *c0) 
            {
                *r0 = cmd[i].r2;
                *c0 = cmd[i].c2;
            }
            else if(cmd[i].r2 == *r0 && cmd[i].c2 == *c0) 
            {
                *r0 = cmd[i].r1;
                *c0 = cmd[i].c1;
            }
        }
        else 
        {
            int dr = 0, dc = 0;//一波处理完之后我的坐标的变化量
            //就是德尔塔r和德尔塔c
            for(int j = 0; j < cmd[i].a; j++)
            {
                int x = cmd[i].x[j];
                if(cmd[i].c[0] == 'I')
                {//加空白行/列
                    if(cmd[i].c[1] == 'R' && x <= *r0)
                    {//选中的行/列数小于或者就是我 那我的行/列数++
                        dr++;
                    }
                    if(cmd[i].c[1] == 'C' && x <= *c0)
                    {
                        dc++;
                    }
                }
                else 
                {
                    if(cmd[i].c[1] == 'R' && x == *r0) 
                    {//选中我 删掉了 歇逼
                        return 0;
                    }
                    if(cmd[i].c[1] == 'C' && x == *c0)
                    {
                        return 0;
                    }
                    if(cmd[i].c[1] == 'R' && x < *r0)
                    {//删到我前面的行/列
                        dr--;//那我行/列数--
                    }
                    if(cmd[i].c[1] == 'C' && x < *c0)
                    {
                        dc--;
                    }
                }
            }
            *r0 += dr; *c0 += dc;
            //r = r0 + 德尔塔r
            //c = c0 + 德尔塔c
        }
    }
    return 1;
}

int main()
{
    int r0,c0,q,kase = 0;//初始的坐标 问几个点 第几组样例
    while(scanf("%d%d%d",&r,&c,&n) == 3 && r)
    {
        for(int i = 0; i < n; i++)
        {
            scanf("%s",cmd[i].c);
            if(cmd[i].c[0] == 'E')
            {
                scanf("%d%d%d%d",&cmd[i].r1,&cmd[i].c1,&cmd[i].r2,&cmd[i].c2);
            }
            else
            {
                scanf("%d",&cmd[i].a);
                for(int j = 0; j < cmd[i].a; j++)
                {
                    scanf("%d",&cmd[i].x[j]);
                }
            }
        }
        if(kase > 0)
        {
            printf("\n");
        }
        printf("Spreadsheet #%d\n", ++kase);

        scanf("%d",&q);
        while(q--)
        {
            scanf("%d%d",&r0,&c0);
            printf("Cell data in (%d,%d) ", r0, c0);
            if(!simulate(&r0, &c0))
            {
                printf("GONE\n");
            }
            else
            {
                printf("moved to (%d,%d)\n", r0, c0);
            }
        }
    }
    return 0;
}