BestCoder Round #81 (div.2) B Matrix

B题。。。水题,记录当前行是由原矩阵哪行变来的。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<iostream>
 5 #include<queue>
 6 #include<stack>
 7 #include<cmath>
 8 #include<algorithm>
 9 #include<malloc.h>
10 using namespace std;
11 #define clc(a,b) memset(a,b,sizeof(a))
12 #define inf 0x3f3f3f3f
13 const int N=10010;
14 #define LL long long
15 const double eps = 1e-5;
16 const double pi = acos(-1);
17  int g[1010][1010];
18 inline int r(){
19     int x=0,f=1;char ch=getchar();
20     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
21     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
22     return x*f;
23 }
24 
25 int lx[1010],ly[1010];
26 
27 int main(){
28     int T;
29     // scanf("%d",&T);
30     T=r();
31     while(T--){
32     int n,m,q;
33     // scanf("%d%d%d",&n,&m,&q);
34     n=r(),m=r(),q=r();
35     for(int i=1;i<=n;i++){
36         for(int j=1;j<=m;j++){
37                g[i][j]=r();
38         }
39     }
40     for(int i=1;i<=n;i++)
41         lx[i]=i;
42     for(int j=1;j<=m;j++)
43         ly[j]=j;
44     while(q--){
45         int a,x,y;
46         a=r(),x=r(),y=r();
47         if(a==1){
48               int a=lx[x];int b=lx[y];
49               lx[x]=b,lx[y]=a;
50         }
51         else if(a==2){
52              int a=ly[x];int b=ly[y];
53              ly[x]=b,ly[y]=a;
54         }
55         else if(a==3){
56             for(int i=1;i<=m;i++)
57                 g[lx[x]][i]+=y;
58         }
59         else {
60             for(int i=1;i<=n;i++){
61                 g[i][ly[x]]+=y;
62             }
63         }   
64     }for(int i=1;i<=n;i++){
65             for(int j=1;j<=m;j++){
66                 if(j==1)
67                     printf("%d",g[lx[i]][ly[j]]);
68                 else printf(" %d",g[lx[i]][ly[j]]);
69             }
70             printf("
");
71         }
72     }
73     return 0;
74 }
View Code
原文地址:https://www.cnblogs.com/ITUPC/p/5423009.html