zoukankan      html  css  js  c++  java
  • hdoj5671 BestCoder Round #81 (div.2)

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

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

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

    复杂度O(q+mn)

    #include<cstdio>
    #include<iostream>
    #include<vector>
    #include<set>
    #include<map>
    #include<queue>
    #include<math.h>
    #include<queue>
    #include<stdlib.h>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    typedef long long LL;
    using namespace std;
    #define INF 0x3f3f3f3f
    #define N 1010
    int a[N][N];
    int ans[N][N];
    
    int xh[N],h[N];
    int xl[N],l[N];
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int q,n,m;
            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]);
            }
            memset(xh,0,sizeof(xh));
            memset(xl,0,sizeof(xl));
            for(int i=1;i<=n;i++)
                h[i]=i;
            for(int i=1;i<=m;i++)
                l[i]=i;
            int k,x,y;
            for(int i=0;i<q;i++)
            {
                scanf("%d%d%d",&k,&x,&y);
                if(k==1)
                {
                    int t=h[x];
                    h[x]=h[y];
                    h[y]=t;
                }
                else if(k==2)
                {
                    int t=l[x];
                    l[x]=l[y];
                    l[y]=t;
                }
                else if(k==3)
                {
                    xh[h[x]]+=y;
                }
                else if(k==4)
                {
                    xl[l[x]]+=y;
                }
            }
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    ans[i][j]=a[h[i]][l[j]]+xh[h[i]]+xl[l[j]];
                }
            }
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    if(j!=1)
                        printf(" ");
                    printf("%d",ans[i][j]);
                }
                printf("
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    .NETCore_初探
    .NETCore_生成实体
    架构碎屑
    Helper
    26.【转载】挖洞技巧:绕过短信&邮箱轰炸限制以及后续
    25.【转载】挖洞技巧:支付漏洞之总结
    24.【转载】挖洞技巧:信息泄露之总结
    5.Windows应急响应:挖矿病毒
    4.Windows应急响应:勒索病毒
    3.Windows应急响应:蠕虫病毒
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934562.html
Copyright © 2011-2022 走看看