uva512
Spreadsheet Tracking - UVA 512 - Virtual Judge
这题有两个坑点,一个是注意输入格式和输出格式(#那行放输入前就输出居然判我错了。。。)
二十插入删除操作都要进行排序,从大到小进行操作,不然会弄错行和列
#include <stdio.h> #include <cstring> #include <string> #include <iostream> #include <algorithm> #include <cmath> using namespace std; // int emm[200000]; int now[100][100],cnt; int main() { while(true){ int r,c,n,a; cin>>r>>c; if(r==0&&c==0)break; for(int i=1;i<=r;i++) for(int j=1;j<=c;j++){ now[i][j]=i*100+j; } cin>>n; for(int nm=1;nm<=n;nm++){ string s; cin>>s; if(s=="EX"){ int a,b,c,d; cin>>a>>b>>c>>d; swap(now[a][b],now[c][d]); } else if(s=="DC"){ int x,xx[20],len=0; cin>>len; for(int i=1;i<=len;i++)cin>>xx[i]; sort(xx+1,xx+len+1); for(int mn=len;mn>=1;mn--){ c--; for(int i=1;i<=r;i++) for(int j=xx[mn];j<=c;j++) now[i][j]=now[i][j+1]; } } else if(s=="DR"){ int x,xx[20],len=0; cin>>len; for(int i=1;i<=len;i++)cin>>xx[i]; sort(xx+1,xx+len+1); for(int mn=len;mn>=1;mn--){ r--; for(int i=xx[mn];i<=r;i++) for(int j=1;j<=c;j++) now[i][j]=now[i+1][j]; } } else if(s=="IR"){ int x,xx[20],len=0; cin>>len; for(int i=1;i<=len;i++)cin>>xx[i]; sort(xx+1,xx+len+1); for(int mn=len;mn>=1;mn--){ r++; for(int i=r;i>=xx[mn]+1;i--) for(int j=1;j<=c;j++) now[i][j]=now[i-1][j]; for(int j=1;j<=c;j++)now[xx[mn]][j]=0; } } else{ int x,xx[20],len=0; cin>>len; for(int i=1;i<=len;i++)cin>>xx[i]; sort(xx+1,xx+len+1); for(int mn=len;mn>=1;mn--){ c++; for(int i=1;i<=r;i++) for(int j=c;j>=xx[mn]+1;j--) now[i][j]=now[i][j-1]; for(int i=1;i<=r;i++)now[i][xx[mn]]=0; } } } if(cnt!=0)cout<<endl; cnt++; printf("Spreadsheet #%d\n",cnt); int q; cin>>q; for(int nm=1;nm<=q;nm++){ int a,b,flag=0; cin>>a>>b; for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) if(now[i][j]==a*100+b){ flag=1; printf("Cell data in (%d,%d) moved to (%d,%d)\n",a,b,i,j); break; } if(flag==0)printf("Cell data in (%d,%d) GONE\n",a,b); } } return 0; }
浙公网安备 33010602011771号