UVa10895 - Matrix Transpose(水題)

題目大意:

給你一個矩陣,請你將原本的矩陣進行對調,原本是 \(num_ij\) 的值改放到 \(num_ji\)。

注意:題目的輸入輸出格式較為特別,需要注意

題目連結

觀念重點

  • 對題目的格式清楚了解
  • 英文閱讀

分析

這題基本上沒有難度,直接讓陣列顛倒即可,怎麼顛倒呢?

題目對每一 row 都會給兩行,第一行的第一個數字是 row 中有幾個 index 要被輸入,這 row 中非 0 元素的 index,第二行則是這些非 0 元素 index 的數值,依此類推,注意,如果 row 沒有值要被輸入,那下一行則會空行。

這是題目的輸入說明,他的輸入格式翻譯成中文再經由我轉述,希望可以讓大家看懂,因為他的輸入於其他 uva 格式較為不同。

只需要將測資輸入到程式時是顛倒就可以了,記得是嚴格比對,然後 row 如果沒有非 0 元素,下行要是空行。

心得

除了練好我的英文能力以外,也要增加我對英文的自信心阿,加強英文閱讀速度,一定會讓我對未來更有力的。

題目程式碼

會在下面放一些簡單註解,供大家學習時參考。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <bits/stdc++.h>
#define LOCAL
#define MAXN 10020
using namespace std;
int num[MAXN][MAXN], row[MAXN];
//num 題目中的 matrix, row 為非零元素的 index
int n, m, r;

void input_row(int i){ //對每一列的非零元素進行輸入
cin >> r; //表示有 r 個非零元素
for(int j = 1; j <= r; j++) //輸入 index
cin >> row[j];
for(int j = 1; j <= r; j++) //再將這些值直接進行轉換傳給 num
cin >> num[row[j]][i]; //row[j] 要在前面,因為直接進行轉換
}

void output(){
cout << m << ' ' << n << '\n'; //顛倒輸出,因為矩陣轉換
vector<int> record; //紀錄這行的非零元素 index
for(int i = 1; i <= m; i++){
record.clear(); //換新行,清空
for(int j = 1; j <= n; j++){
if(num[i][j]) record.push_back(j); //如果 num 數值不是 0,那 record 紀錄 index
}
cout << record.size(); //有多少非零元素
for(auto it: record) cout << ' ' << it; //輸出這些 index
cout << '\n';

if(record.size() > 0){ //如果有元素可以被輸出,才須要輸出數值
for(int j = 0; j < record.size()-1; j++) cout << num[i][record[j]] << ' ';
//依序輸出每個非零元素,最後一個獨立輸出,因為她的後面不能加上空白
cout << num[i][record[record.size()-1]] ; //獨立輸出
}
cout << '\n'; //換行
}
}

int main()
{
#ifdef LOCAL
freopen("in1.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif // LOCAL
while(cin >> n >> m){
memset(num, 0, sizeof(num)); //初始題目陣列
memset(row, 0, sizeof(row)); //初始紀錄非零元素的 index 陣列
for(int i = 1; i <= n; i++) input_row(i); //對每 row 進行輸入值
output(); //輸出轉換
}
return 0;
}
  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: