码迷,mamicode.com
首页 > 其他好文 > 详细

uva 512

时间:2019-12-24 22:08:29      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:cst   reads   flag   pre   stream   表格   _for   iostream   nbsp   

模拟,先处理表格后面的行和列再处理前面的(无论是插入还是删除),否则操作会出问题。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define _for(i, a, b) for (int i = (a); i <= (b);i++)
struct sheet{
    int x, y;
} c[55][55];//记录下原始下标
int n, m,row,col;
void init(){
    for (int i = 1; i <= 54;i++){
        for (int j = 1; j <= 54;j++){
            c[i][j].x = i;
            c[i][j].y = j;
        }
    }
}//赋初值
void ir(){
    int a[10];
    int num;
    cin >> num;
    _for(i,0,num-1){
        cin >> a[i];
    }
    sort(a, a + num);
    for (int i = num - 1; i >= 0;i--){
        for (int j = row; j >= a[i];j--){
            for (int k = 1; k <= col;k++){
                c[j + 1][k].x = c[j][k].x;
                c[j + 1][k].y = c[j][k].y;
            }
        }//往下移一格,后面的先移
        for (int k = 1; k <= col;k++){
            c[a[i]][k].x = c[a[i]][k].y=0;
        }//添加的空白行置为0
        row++;//行数加一
    }

};
void ic(){
    int a[10];
    int num;
    cin >> num;
    _for(i, 0, num-1)
    {
        cin >> a[i];
    }
    sort(a, a + num);
    for (int i = num - 1; i >= 0;i--){
        for (int j = col; j >= a[i];j--){
            for (int k = 1; k <= row;k++){
                c[k][j + 1].x = c[k][j].x;
                c[k][j + 1].y = c[k][j].y;
            }
        }
        for (int k = 1; k <= row;k++){
            c[k][a[i]].x = 0;
            c[k][a[i]].y = 0;
        }
        col++;
    }
};
void dr(){
    int a[10];
    int num;
    cin >> num;
    _for(i, 0, num-1)
    {
        cin >> a[i];
    }
    sort(a, a + num);
    for (int i = num - 1; i >= 0;i--){
        for (int j = a[i] + 1; j <= row;j++){
            for (int k = 1; k <= col;k++){
                c[j-1][k].x = c[j][k].x;
                c[j-1][k].y = c[j][k].y;
            }
        }
        row--;
    }
};
void dc(){
    int a[10];
    int num;
    cin >> num;
    _for(i, 0, num-1)
    {
        cin >> a[i];
    }
    sort(a, a + num);
    for (int i = num - 1; i >= 0;i--){
        for (int j = a[i] + 1; j <= col;j++){
            for (int k = 1; k <= row;k++){
                c[k][j - 1].x = c[k][j].x;
                c[k][j - 1].y = c[k][j].y;
            }
        }
        col--;
    }
};
int main(){
    int kase = 0;
    while(scanf("%d%d",&n,&m)==2&&(n||m)){
        row = n, col = m;
        init();
        int t;
        scanf("%d", &t);
        while(t--){
            string op;
            cin >> op;
            if(op=="IR"){
                ir();
            }else if(op=="IC"){
                ic();
            }else if(op=="DR"){
                dr();
            }else if(op=="DC"){
                dc();
            }else{
                int x1, x2, y1, y2,t1,t2;
                cin >> x1 >> y1 >> x2 >> y2;
                t1 = c[x1][y1].x, t2 = c[x1][y1].y;
                c[x1][y1].x = c[x2][y2].x, c[x1][y1].y = c[x2][y2].y;
                c[x2][y2].x = t1, c[x2][y2].y=t2;
            }
        }
        if(kase>0)
            puts("");
        printf("Spreadsheet #%d\n", ++kase);
        int q;
        cin >> q;

        while (q--)
        {
            int x1, y1,flag=0;
            cin >> x1 >> y1;
            for(int i=1;i<=row&&!flag;i++){
                for(int j=1;j<=col&&!flag;j++){
                    if(c[i][j].x==x1&&c[i][j].y==y1){
                        flag = 1;
                        printf("Cell data in (%d,%d) moved to (%d,%d)\n", c[i][j].x, c[i][j].y,i,j);
                    }
                }
            }
            if(!flag) printf("Cell data in (%d,%d) GONE\n",x1,y1);
        }
    }
    return 0;
}

 

uva 512

标签:cst   reads   flag   pre   stream   表格   _for   iostream   nbsp   

原文地址:https://www.cnblogs.com/zlwjy/p/12093803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!