uva 512 Spreadsheet Tracking

这题修改了很多次,一直不能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;
}

你可能感兴趣的:(uva 512 Spreadsheet Tracking)