紫书章四 Spreadsheet Tracking UVA - 512(单元格去哪了,模拟结果更简单))
2017-03-31 20:37
351 查看
开始想直接模拟单元格。。但是总是WA,还没有找到问题在哪。。之后再回来看看。
然后队友告诉我可以直接通过询问来找,这样就简单多了。我们只需要将操作的顺序记下来,然后将询问按照顺序来一遍,就可以得到answer了
以下是WA 的代码
然后队友告诉我可以直接通过询问来找,这样就简单多了。我们只需要将操作的顺序记下来,然后将询问按照顺序来一遍,就可以得到answer了
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; char s[5]; int d[150][150]; int main() { int r,c; int case1=0; while(scanf("%d %d",&r,&c)!=EOF&&r+c) { if(case1) printf("\n"); printf("Spreadsheet #%d\n",++case1); int n; scanf("%d",&n); memset(d,0,sizeof(d)); int temp=n; while(n--){ int h1=0,h2=0,h3=0,h4=0,h5=0; scanf("%s",s); int a[15]; if(s[0]=='E') { scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]); d[temp-n][h1++]=1; for(int i=0;i<4;i++) d[temp-n][h1++]=a[i]; } else { int k; scanf("%d",&k); for(int i=0;i<k;i++) scanf("%d",&a[i]); if(s[0]=='D'){ if(s[1]=='R'){ d[temp-n][h2++]=2; for(int i=0;i<k;i++) d[temp-n][h2++]=a[i]; } else if(s[1]=='C'){ d[temp-n][h3++]=3; for(int i=0;i<k;i++) d[temp-n][h3++]=a[i]; } } else if(s[0]=='I'){ if(s[1]=='R'){ d[temp-n][h4++]=4; for(int i=0;i<k;i++) d[temp-n][h4++]=a[i]; } else if(s[1]=='C'){ d[temp-n][h5++]=5; for(int i=0;i<k;i++) d[temp-n][h5++]=a[i]; } } } } int m; scanf("%d",&m); for(int i=0;i<m;i++) { int r5,c5; scanf("%d %d",&r5,&c5); printf("Cell data in (%d,%d) ",r5,c5); for(int j=1;j<=temp;j++) { int tr5=r5,tc5=c5; if(d[j][0]==1) { if(r5==d[j][1]&&c5==d[j][2]){ r5=d[j][3];c5=d[j][4]; } else if(r5==d[j][3]&&c5==d[j][4]){ r5=d[j][1];c5=d[j][2]; } } else if(d[j][0]==2) { for(int k=1;k<=10;k++) { if(d[j][k]==0) break; if(d[j][k]<r5) tr5--; else if(d[j][k]==r5) { tr5=-1;break;} } r5=tr5; } else if(d[j][0]==3){ for(int k=1;k<=10;k++) { if(d[j][k]==0) break; if(d[j][k]<c5) tc5--; else if(d[j][k]==c5) { tc5=-1;break;} } c5=tc5; } else if(d[j][0]==4){ for(int k=1;k<=10;k++) { if(d[j][k]==0) break; if(d[j][k]<=r5) tr5++; } r5=tr5; } else if(d[j][0]==5){ for(int k=1;k<=10;k++) { if(d[j][k]==0) break; if(d[j][k]<=c5) tc5++; } c5=tc5; } } if(r5<1||c5<1) printf("GONE\n"); else printf("moved to (%d,%d)\n",r5,c5); } } return 0; }
以下是WA 的代码
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; struct node { int r,c; }; int d[55][55]; char s[5]; int rw[55]; int cw[55]; int dd[55]; int r,c; void init() { for(int i=1;i<=r;i++){ rw[i]=i;} for(int j=1;j<=c;j++) cw[j]=j; } void ex()//因为你不知道是哪一步ex,所以要在单元格中找到那个位子 { int r1,c1,r2,c2; scanf("%d %d %d %d",&r1,&c1,&r2,&c2); int i,j; for(i=1;i<=r;i++) { if(rw[i]==r1) break; } r1=i; for(i=1;i<=r;i++){ if(rw[i]==r2) break; } r2=i; for(i=1;i<=c;i++){ if(cw[i]==c1) break; } c1=i; for(i=1;i<=c;i++){ if(cw[i]==c2) break; } c2=i; d[r1][c1]=(r2-1)*c+c2; d[r2][c2]=(r1-1)*c+c1; } void del() { int a; scanf("%d",&a); if(s[1]=='R') { memcpy(dd,rw,sizeof(rw));//要求在这个操作中都是不能的,所以要先复制在另外一个数组上 for(int i=1;i<=a;i++) { int k; scanf("%d",&k); int temp=k,g; for(g=1;g<=r;g++){ if(dd[g]>0) temp--; if(temp==0) break; } rw[g]=-1; for(int j=g+1;j<=r;j++) rw[j]--; } } else if(s[1]=='C') { memcpy(dd,cw,sizeof(cw)); for(int i=1;i<=a;i++) { int k; scanf("%d",&k); int temp=k,g; for(g=1;g<=c;g++){ if(dd[g]>0) temp--; if(temp==0) break; } cw[g]=-1; for(int j=g+1;j<=c;j++){ cw[j]--; } } } } void inp() { int a; scanf("%d",&a); if(s[1]=='R'){ memcpy(dd,rw,sizeof(rw)); for(int i=1;i<=a;i++) { int k; scanf("%d",&k); int temp=k,g; for(g=1;g<=r;g++){ if(dd[g]>0) temp--; if(temp==0) break; } for(int j=g;j<=r;j++) { if(rw[j]>0) rw[j]++; } } } else if(s[1]=='C'){ memcpy(dd,cw,sizeof(cw)); for(int i=1;i<=a;i++){ int k; scanf("%d",&k); int temp=k,g; for(g=1;g<=c;g++){ if(dd[g]>0) temp--; if(temp==0) break; } for(int j=g;j<=c;j++) { if(cw[j]>0) cw[j]++; } } } } int main() { // freopen("D:\\input.txt","r",stdin); int case1=0; while(scanf("%d %d",&r,&c)!=EOF&&r+c) { if(case1) printf("\n"); printf("Spreadsheet #%d\n",++case1); memset(cw,0,sizeof(cw)); memset(rw,0,sizeof(rw)); memset(d,0,sizeof(d)); memset(dd,0,sizeof(dd)); init(); a883 int n; scanf("%d",&n); while(n--){ scanf("%s",s); if(s[0]=='E') ex(); else if(s[0]=='D') del(); else if(s[0]=='I') inp(); // sx(); } int m; scanf("%d",&m); for(int i=0;i<m;i++){ int r5,c5; scanf("%d %d",&r5,&c5); printf("Cell data in (%d,%d) ",r5,c5); if(d[r5][c5]) { int ggg=d[r5][c5]; if(ggg%c==0) { c5=c,r5=ggg/c; } else{ r5=ggg/c+1; c5=ggg%c; } } if(rw[r5]<1||cw[c5]<1) printf("GONE\n"); else printf("moved to (%d,%d)\n",rw[r5],cw[c5]); } } return 0; }
相关文章推荐
- 紫书章四 Spreadsheet Tracking UVA - 512(单元格去哪了,模拟结果更简单))
- 紫书章四 Spreadsheet Tracking UVA - 512(单元格去哪了,模拟结果更简单))
- 紫书章四 Spreadsheet Tracking UVA - 512(单元格去哪了,模拟结果更简单))
- 紫书章四 Spreadsheet Tracking UVA - 512(单元格去哪了,模拟结果更简单))
- 紫书章四 Spreadsheet Tracking UVA - 512(单元格去哪了,模拟结果更简单))
- 紫书章四 Spreadsheet Tracking UVA - 512(单元格去哪了,模拟结果更简单))
- 紫书章四 Spreadsheet Tracking UVA - 512(单元格去哪了,模拟结果更简单))
- UVALive5198 UVA512 Spreadsheet Tracking【模拟】
- [UVA512]Spreadsheet Tracking[模拟][STL]
- UVA-512-Spreadsheet Tracking 简单模拟题 对一个表进行增删操作后查表 打表写法+详细注释
- UVa 512 - Spreadsheet Tracking (模拟)
- Spreadsheet Tracking UVA - 512(追踪电子表格中的单元格)
- Uva - 512 - Spreadsheet Tracking
- UVa_512 - Spreadsheet Tracking
- Uva512 Spreadsheet Tracking
- uva 512 Spreadsheet Tracking
- UVa 512 - Spreadsheet Tracking
- UVa 512 Spreadsheet Tracking
- UVa 512 Spreadsheet Tracking
- UVa512 - Spreadsheet Tracking