hdu 5671 Matrix

来源:互联网 发布:淘宝网手套 编辑:程序博客网 时间:2024/04/30 20:30

对于交换行、交换列的操作,分别记录当前状态下每一行、每一列是原始数组的哪一行、哪一列即可。

对每一行、每一列加一个数的操作,也可以两个数组分别记录。注意当交换行、列的同时,也要交换增量数组。

输出时通过索引找到原矩阵中的值,再加上行、列的增量。

#include <iostream>#include <cstdio>#include <map>#include <cstring>#include <vector>using namespace std;const int N = 1005;int n, m;int row[N];int col[N];int mat[N][N];int row_add[N];int col_add[N];int main(){    int T, q, type, x, y;    scanf("%d", &T);    while(T--)    {        scanf("%d%d%d", &n, &m, &q);        memset(row_add, 0, sizeof(row_add));        memset(col_add, 0, sizeof(col_add));        for(int i=0; i<n; i++)        {            for(int j=0; j<m; j++)            {                scanf("%d", &mat[i][j]);                col[j] = j;            }            row[i] = i;        }        while(q--)        {            scanf("%d%d%d", &type, &x, &y);            if(type == 1)            {                x--;                y--;                swap(row[x], row[y]);                swap(row_add[x], row_add[y]);            }            else if(type == 2)            {                x--;                y--;                swap(col[x], col[y]);                swap(col_add[x], col_add[y]);            }            else if(type == 3)            {                x--;                row_add[x] += y;            }            else if(type == 4)            {                x--;                col_add[x] += y;            }        }        for(int i=0; i<n; i++)        {            for(int j=0; j<m ;j++)                if(j == 0)                    printf("%d", mat[row[i]][col[j]] + row_add[i] + col_add[j]);                else                    printf(" %d", mat[row[i]][col[j]] + row_add[i] + col_add[j]);            printf("\n");        }    }    return 0;}


0 0
原创粉丝点击