UVA 512 Spreadsheet Tracking
1 #include "stdio.h" 2 #include "string.h" 3 #define maxd 10000 4 int r,c,n; 5 struct Command{ 6 char c[5];//操作,比如EX,IR 7 int r1,c1,r2,c2;// EX交换的坐标 8 int a,x[20];//a:每次操作的操作次数(非EX),比如 IR 2 1 5,插入1和5,a=2 9 //x[20],记录每次操作对应的内容,也就是上面的1 5 10 }cmd[maxd]; 11 int simulate(int *r0,int *c0) 12 { 13 for(int i=0;i<n;i++) 14 { 15 if(cmd[i].c[0]=='E')//交换操作 16 { 17 if(cmd[i].r1==*r0&&cmd[i].c1==*c0)//要交换的是查找的数 18 { 19 *r0=cmd[i].r2; 20 *c0=cmd[i].c2; 21 } 22 else if(cmd[i].r2==*r0&&cmd[i].c2==*c0)//查找的是要被交换的数 23 { 24 *r0=cmd[i].r1; 25 *c0=cmd[i].c1; 26 } 27 } 28 else 29 { 30 int dr=0,dc=0;//dr要修改的行 dc要修改的列 31 for(int j=0;j<cmd[i].a;j++) 32 { 33 int x=cmd[i].x[j]; 34 if(cmd[i].c[0]=='I')//插入 35 { 36 if(cmd[i].c[1]=='R'&&x<=*r0)//插入列,且插入在*r0及其前面才需要管 37 dr++; 38 if(cmd[i].c[1]=='C'&&x<=*c0) 39 dc++; 40 } 41 else//删除 42 { 43 if(cmd[i].c[1]=='R'&&x==*r0)//要查询的行被删除 44 return 0; 45 if(cmd[i].c[1]=='C'&&x==*c0)//要查询的列被删除 46 return 0; 47 if(cmd[i].c[1]=='R'&&x<*r0) 48 dr--; 49 if(cmd[i].c[1]=='C'&&x<*c0) 50 dc--; 51 } 52 } 53 *r0+=dr; 54 *c0+=dc; 55 } 56 } 57 return 1; 58 } 59 int main() 60 { 61 int r0,c0,kase=0,q; 62 while(scanf("%d%d%d",&r,&c,&n)==3&&r)//输入行列和操作次数n 63 { 64 for(int i=0;i<n;i++) 65 { 66 scanf("%s",cmd[i].c); 67 if(cmd[i].c[0]=='E')//EX操作为交换 68 { 69 //输入交换的两组坐标 70 scanf("%d%d%d%d",&cmd[i].r1,&cmd[i].c1,&cmd[i].r2,&cmd[i].c2); 71 } 72 else 73 { 74 scanf("%d",&cmd[i].a);//输入操作数目 75 for(int j=0;j<cmd[i].a;j++) 76 { 77 scanf("%d",&cmd[i].x[j]); 78 } 79 } 80 } 81 if(kase>0) 82 printf("\n"); 83 printf("Spreadsheet #%d\n",++kase); 84 scanf("%d",&q);//输入查询次数 85 while(q--) 86 { 87 scanf("%d%d",&r0,&c0); 88 printf("Cell data in (%d,%d) ",r0,c0); 89 if(!simulate(&r0,&c0)) 90 printf("GONE\n"); 91 else 92 printf("moved to (%d,%d)\n",r0,c0); 93 } 94 } 95 return 0; 96 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步