• hdu 5671 Matrix 标记。。。有点晕


    Matrix

    Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)


    Problem Description
    There is a matrix M 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 nm and q.
    The following n lines describe the matrix M.(1Mi,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
     
    Source
    思路:就是标记记录那行是原数组的那行,在原数组的那行加减就好;
    代码
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<stack>
    #include<cstring>
    #include<vector>
    #include<list>
    #include<set>
    #include<map>
    using namespace std;
    #define ll __int64
    #define mod 1000000007
    #define inf 999999999
    //#pragma comment(linker, "/STACK:102400000,102400000")
    ll a[1010][1010];
    ll hang[1010],lie[1010],hangadd[1010],lieadd[1010];//不管你怎么换 ,都不可能把这行给拆了
    int main()
    {
        ll casee,i,t;
        scanf("%I64d",&casee);
        while(casee--)
        {
            ll n,m,q;
            memset(hangadd,0,sizeof(hangadd));
            memset(lieadd,0,sizeof(lieadd));
            scanf("%I64d%I64d%I64d",&n,&m,&q);
            for(i=1;i<=n;i++)
            for(t=1;t<=m;t++)
            {
                scanf("%I64d",&a[i][t]);
                hang[i]=i;
                lie[t]=t;
            }
            while(q--)
            {
                ll op,han,li;
                scanf("%I64d%I64d%I64d",&op,&han,&li);
                if(op==1)
                {
                    swap(hang[han],hang[li]);
                }
                else if(op==2)
                {
                    swap(lie[han],lie[li]);
                }
                else if(op==3)
                hangadd[hang[han]]+=li;
                else
                lieadd[lie[han]]+=li;
            }
            for(i=1;i<=n;i++)
            for(t=1;t<=m;t++)
            printf("%I64d%c",a[hang[i]][lie[t]]+hangadd[hang[i]]+lieadd[lie[t]],t==m?'
    ':' ');
        }
        return 0;
    }
    View Code
  • 相关阅读:
    2017.10.25总结与回顾
    2017.10.24总结与回顾
    CSS盒子模型
    2017.10.23学习知识总结回顾及编写新网页
    JAVA与mysql之间的编码问题
    想写好代码,送你三个神器
    Vue+highligh.js实现语法高亮(转)
    Vue.JS实现复制到粘帖板功能
    npm install、npm install --save与npm install --save-dev区别(转)
    ES7与ES8新特性
  • 原文地址:https://www.cnblogs.com/jhz033/p/5427140.html
Copyright © 2020-2023  润新知