zoukankan      html  css  js  c++  java
  • HDU 5671 Matrix 水题

    Matrix

    题目连接:

    http://acm.hdu.edu.cn/showproblem.php?pid=5671

    Description

    There is a matrix M that has n rows and m columns (1≤n≤1000,1≤m≤1000).Then we perform q(1≤q≤100,000) operations:

    1 x y: Swap row x and row y (1≤x,y≤n);

    2 x y: Swap column x and column y (1≤x,y≤m);

    3 x y: Add y to all elements in row x (1≤x≤n,1≤y≤10,000);

    4 x y: Add y to all elements in column x (1≤x≤m,1≤y≤10,000);

    Input

    There are multiple test cases. The first line of input contains an integer T(1≤T≤20) 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.(1≤Mi,j≤10,000) for all (1≤i≤n,1≤j≤m).
    The following q lines contains three integers a(1≤a≤4), 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

    题意

    有一个(n)(m)列的矩阵((1 leq n leq 1000 ,1 leq m leq 1000 )),在这个矩阵上进行$q $ ((1 leq q leq 100,000)) 个操作:

    1 x y: 交换矩阵(M)的第(x)行和第(y)((1 leq x,y leq n));
    2 x y: 交换矩阵(M)的第(x)列和第(y)((1 leq x,y leq m));
    3 x y: 对矩阵(M)的第(x)行的每一个数加上(y(1 leq x leq n,1 leq y leq 10,000));
    4 x y: 对矩阵(M)的第(x)列的每一个数加上(y(1 leq x leq m,1 leq y leq 10,000));

    题解:

    其实这些操作看着麻烦

    但是我们都去打个标记就好了

    他对于每一行和每一列的操作是分开的,我们对于每一行和每一列打标记就行了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1005;
    int l[maxn],r[maxn],l1[maxn],r1[maxn];
    int a[maxn][maxn];
    void solve()
    {
        int n,m,q;
        scanf("%d%d%d",&n,&m,&q);
        for(int i=1;i<=n;i++)l1[i]=i,l[i]=0;
        for(int i=1;i<=m;i++)r1[i]=i,r[i]=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&a[i][j]);
        for(int i=1;i<=q;i++)
        {
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            if(a==1)swap(l1[b],l1[c]);
            if(a==2)swap(r1[b],r1[c]);
            if(a==3)l[l1[b]]+=c;
            if(a==4)r[r1[b]]+=c;
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(j==m)printf("%d",a[l1[i]][r1[j]]+l[l1[i]]+r[r1[j]]);
                else printf("%d ",a[l1[i]][r1[j]]+l[l1[i]]+r[r1[j]]);
            }
            printf("
    ");
        }
    }
    int main()
    {
        int t;scanf("%d",&t);
        while(t--)solve();
        return 0;
    }
  • 相关阅读:
    053-509
    053-298
    053-255
    css实现省略号
    github上写blog
    解决内容被挤压缩小问题
    request.getRequestDispather().forward()与response.sendRedirect()
    资料,来自HTML5前端开发学习⑤群
    checkbox与jq<转>2
    checkbox与jq<转>
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5427156.html
Copyright © 2011-2022 走看看