当前位置: 首页 > news >正文

uva512

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;
}