程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> hdu 5671 Matrix(BC——思維題)

hdu 5671 Matrix(BC——思維題)

編輯:關於C

題目鏈接:acm.hdu.edu.cn/showproblem.php?pid=5671

Matrix

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

Problem Description There is a matrixMthat hasnrows andmcolumns(1≤n≤1000,1≤m≤1000).Then we performq(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 integerT(1≤T≤20)indicating the number of test cases. For each test case:

The first line contains three integersn,mandq.
The followingnlines describe the matrix M.(1≤Mi,j≤10,000)for all(1≤i≤n,1≤j≤m).
The followingqlines contains three integersa(1≤a≤4),xandy.

Output For each test case, output the matrixMafter allqoperations.
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 BestCoder Round #81 (div.2) 題目大意:
有一個nn行mm列的矩陣(1 \leq n \leq 1000 ,1 \leq m \leq 1000 )(1≤n≤1000,1≤m≤1000),在這個矩陣上進行qq  (1 \leq q \leq 100,000)(1≤q≤100,000) 個操作:

1 x y: 交換矩陣MM的第xx行和第yy行(1 \leq x,y \leq n)(1≤x,y≤n);
2 x y: 交換矩陣MM的第xx列和第yy列(1 \leq x,y \leq m)(1≤x,y≤m);
3 x y: 對矩陣MM的第xx行的每一個數加上y(1 \leq x \leq n,1 \leq y \leq 10,000)y(1≤x≤n,1≤y≤10,000);
4 x y: 對矩陣MM的第xx列的每一個數加上y(1 \leq x \leq m,1 \leq y \leq 10,000)y(1≤x≤m,1≤y≤10,000);對於每組數據,輸出經過所有q個操作之後的矩陣M。
解題思路:如果單純進行模擬的話,數據量比較大,所以采用標記的方式。分別記錄當前狀態下每一行、每一列是原始數組的哪一行、哪一列即可。對每一行、每一列加一個數的操作,也可以兩個數組分別記錄。注意當交換行、列的同時,也要交換增量數組。輸出時通過索引找到原矩陣中的值,再加上行、列的增量。

詳見代碼。

#include 
#include 
#include 

using namespace std;

int Map[1010][1010],a;
int h[1010],l[1010],dh[1010],dl[1010];

int main()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        memset(dh,0,sizeof(dh));
        memset(dl,0,sizeof(dl));
        int n,m,q;
        scanf("%d%d%d",&n,&m,&q);
        for (int i=1; i<=n; i++)
        {
            for (int j=1; j<=m; j++)
            {
                scanf("%d",&Map[i][j]);
                h[i]=i;
                l[j]=j;
            }
        }
        for (int i=0; i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved