HDU5671Matrix

来源:互联网 发布:2008年雪灾知乎 编辑:程序博客网 时间:2024/06/03 07:59

矩阵处理,记录好每行与列在原来的位置即可

设原来的第i行现在在第x[i]行,原来的第i列现在在第y[i]列

xd[i]表示第i行需要增加的值,yd[i]表示第i列需要增加的值

#include<iostream>#include<cstdio>using namespace std;const int maxn=1005;int n,m,q;int a[maxn][maxn];int x[maxn],y[maxn],xd[maxn],yd[maxn];int main(){    int t; scanf("%d",&t);    while(t--){        for(int i=1;i<maxn;++i){            x[i]=y[i]=i;            xd[i]=yd[i]=0;        }        scanf("%d %d %d",&n,&m,&q);        for(int i=1;i<=n;++i)            for(int j=1;j<=m;++j) scanf("%d",&a[i][j]);        int t1,t2,t3;        while(q--){            scanf("%d %d %d",&t1,&t2,&t3);            switch(t1){            case 1:                swap(x[t2],x[t3]);                break;            case 2:                swap(y[t2],y[t3]);                break;            case 3:                xd[x[t2]]+=t3;                break;            case 4:                yd[y[t2]]+=t3;                break;            }        }        for(int i=1;i<=n;++i){            for(int j=1;j<=m;++j){                if(j!=1) printf(" ");                printf("%d",a[x[i]][y[j]]+xd[x[i]]+yd[y[j]]);            }            printf("\n");        }    }}




0 0