这题修改了很多次,一直不能ac,直到引用改为指针传递才ac,无语了,uva不能使用引用
#include<iostream>
#include<cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int r,c,n;
struct Commod{
int r1,c1,r2,c2;
char c[5000];
int a,x[10000];
}cmd[10000];
int simulate(int *r0,int *c0)
{
for(int i=0;i<n;i++)
{
if(cmd[i].c[0]=='E')
{
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;
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;
}
}
return 1;
}
int main()
{
int r0,c0,q,kase=0;
while(scanf("%d%d",&r,&c)!=EOF)
{
if(r+c==0) break;
cin>>n;
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) cout<<endl;
printf("Spreadsheet #%d\n",++kase);
cin>>q;
while(q--)
{
scanf("%d%d",&r0,&c0);
printf("Cell data in (%d,%d) ",r0,c0);
if(!simulate(&r0,&c0)) cout<<"GONE"<<endl;
else printf("moved to (%d,%d)\n",r0,c0);
}
}
return 0;
}