被虐到麻木的代某
#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;
}


京公网安备 11010502036488号