HDU 5671 Matrix

Matrix

Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 502    Accepted Submission(s): 215

Problem Description
There is a matrix that has n rows and m columns (1n1000,1m1000).Then we perform q(1q100,000) operations:
1 x y: Swap row x and row y (1x,yn) ;
2 x y: Swap column x and column y (1x,ym) ;
3 x y: Add y to all elements in row x (1xn,1y10,000) ;
4 x y: Add y to all elements in column x (1xm,1y10,000) ;
 
Input
There are multiple test cases. The first line of input contains an integer T(1T20) indicating the number of test cases. For each test case:
The first line contains three integers n , m and q .
The following n lines describe the matrix M.(1M,i,j10,000) for all (1in,1jm) .
The following q lines contains three integers a(1a4) , x and y .
 
Output
For each test case, output the matrix M after all q operations.
 
Sample Input
2
3 4 2
1 2 3 4
2 3 4 5
3 4 5 6
1 1 2
3 1 10
2 2 2
1 10
10 1
1 1 2
2 1 2
 
Sample Output
12 13 14 15
1 2 3 4
3 4 5 6
1 10
10 1
Hint
Recommand to use scanf and printf
 
Recommend
wange2014   
题目大意:有一个n行m列的矩阵,在这个矩阵上进行q个操作,输出经过所有q个操作以后的矩阵M
思路:用4个数组,对于交换行、交换列的操作,分别记录当前状态下每一行、每一列是原始数组的哪一行、哪一列即可。
对每一行、每一列加一个数的操作,也可以两个数组分别记录。
注意当交换行、列的同时,也要交换增量数组。
输出时通过索引找到原矩阵中的值,再加上行、列的增量。
#include <iostream>
#include <string.h> 
using namespace std;
int h[1010],l[1010], zh[1010], zl[1010];
int a[1010][1010];
int main()
{
    int T, n, m, q, i, j, c, x, y, t;
    cin>>T;
    while(T--)
    {
    memset(zh,0,sizeof(zh));
    memset(zl,0,sizeof(zl));
    for(i=1;i<=1005;i++)
    h[i]=l[i]=i;
    scanf("%d%d%d", &n, &m, &q);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
    scanf("%d", &a[i][j]);
    while(q--)
    {
    scanf("%d%d%d", &c, &x, &y);
    if(c==1) {t=h[x];h[x]=h[y];h[y]=t;}
    else if(c==2) {t=l[x];l[x]=l[y];l[y]=t;}
    else if(c==3) zh[h[x]] += y;
    else if(c==4) zl[l[x]] += y;
    }
    for(i=1;i<=n;i++)
        {
        for(j=1;j<=m;j++)
        if(j==1)
        printf("%d", a[h[i]][l[j]]+zh[h[i]]+zl[l[j]]);
        else
        printf(" %d", a[h[i]][l[j]]+zh[h[i]]+zl[l[j]]);
        printf("\n");
        }
    }
    return 0;
}

 

 

posted on 2016-04-23 23:06  2855669158  阅读(173)  评论(0编辑  收藏  举报

导航