_YueYang

导航

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

 

posted on 2026-07-29 11:28  _YueYang  阅读(0)  评论(0)    收藏  举报