UVA-512 Spreadsheet Tracking
阿新 • • 發佈:2018-11-27
傳送門:UVA-512
一開始嫌直接模擬麻煩,瞎搞了一個方法,UDebug裡的in都過了,然而就是wa。。。放棄後直接建個表很快ac了
AC程式碼:
#include<iostream> #include<algorithm> #include<vector> using namespace std; const int maxn=60; int main() { int r,c,n,m,num=1; while(cin>>r>>c){ if(!r||!c) break; int cnt=0; if(num>1) cout<<endl; vector<vector<int> > pq;//建表 for(int i=0;i<=r;++i){ vector<int> tmp; for(int j=0;j<=c;++j) tmp.push_back(cnt++); pq.push_back(tmp); } cin>>n; string tmp; for(int i=0;i<n;++i){ cin>>tmp; if(tmp=="EX"){ int x1,y1,x2,y2; cin>>x1>>y1>>x2>>y2; swap(pq[x1][y1],pq[x2][y2]); continue; } cin>>m; int yu[maxn]; for(int j=0;j<m;++j) cin>>yu[j]; sort(yu,yu+m);//存需要操作的行或列並排序 if(tmp=="DR") for(int j=0;j<m;++j) pq.erase(pq.begin()+yu[j]-j); else if(tmp=="DC") for(int j=0;j<m;++j) for(int k=0;k<pq.size();++k) pq[k].erase(pq[k].begin()+yu[j]-j); else if(tmp=="IR") for(int j=0;j<m;++j){ vector<int> rt; for(int k=0;k<pq[0].size();++k) rt.push_back(cnt++); pq.insert(pq.begin()+yu[j]+j,rt); } else if(tmp=="IC") for(int j=0;j<m;++j) for(int k=0;k<pq.size();++k) pq[k].insert(pq[k].begin()+yu[j]+j,cnt++); } cin>>n; printf("Spreadsheet #%d\n",num++); for(int i=0;i<n;++i){ int flag=0,x,y; cin>>x>>y; for(int j=1;j<pq.size();++j){ for(int k=1;k<pq[j].size();++k) if(pq[j][k]==x*(c+1)+y){ printf("Cell data in (%d,%d) moved to (%d,%d)\n",x,y,j,k); flag=1;break; } if(flag) break; } if(!flag) printf("Cell data in (%d,%d) GONE\n",x,y); } } return 0; }