日期:2025年2月2日
ZeroJudge 題目連結:e798. p5. 卷積神經網路
解題想法
可以讀取完整個矩陣的資料再處理最大池化,也可以每讀 2 列矩陣資料就輸出一次最大池化的結果,效率差不多。
Python 程式碼
使用時間約為 18 ms,記憶體約為 3.3 MB,通過測試。
n = int(input()) # 矩陣大小 n*n
mat = [list(map(int, input().split())) for _ in range(n)] # 讀取矩陣資料
pool = [[0]*(n//2) for _ in range(n//2)] # 儲存最大池化的結果
for r in range(0, n, 2): # 依序掃過第 0 ~ n-1 列,每次跳 2 列
for c in range(0, n, 2): # 依序掃過第 0 ~ n-1 欄,每次跳 2 欄
pool[r//2][c//2] = max(mat[r][c], mat[r][c+1], mat[r+1][c], mat[r+1][c+1]) # 取 4 格中的最大值
for row in pool: print(*row) # 依序印出 pool 每列的資料
每讀取 2 列就輸出 1 次,使用時間約為 19 ms,記憶體約為 3.3 MB,通過測試。
n = int(input()) # 矩陣大小 n*n
for r in range(0, n, 2): # 依序掃過第 0 ~ n-1 列,每次跳 2 列
row1 = list(map(int, input().split())) # 讀取 2 列
row2 = list(map(int, input().split()))
pool = [0]*(n//2) # 儲存最大池化結果的串列
for c in range(0, n, 2): # 依序掃過第 0 ~ n-1 欄,每次跳 2 欄
pool[c//2] = max(row1[c], row1[c+1], row2[c], row2[c+1]) # 取 4 格中的最大值
print(*pool) # 印出 pool 的資料
C++ 程式碼
使用時間約為 2 ms,記憶體約為 352 kB,通過測試。
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int n; cin >> n; // 矩陣大小 n*n
int mat[n][n]; // 讀取矩陣資料
for(int r=0; r<n; r++) {
for(int c=0; c<n; c++) cin >> mat[r][c];
}
int pool[n/2][n/2]; // 儲存最大池化的結果
for(int r=0; r<n; r+=2) { // 依序掃過第 0 ~ n-1 列,每次跳 2 列
for(int c=0; c<n; c+=2) { // 依序掃過第 0 ~ n-1 欄,每次跳 2 欄
pool[r/2][c/2] = max(mat[r][c], max(mat[r][c+1], max(mat[r+1][c], mat[r+1][c+1]))); // 取 4 格中的最大值
}
}
for(int r=0; r<n/2; r++) { // 依序印出 pool 每列的資料
for(int c=0; c<n/2; c++) {
cout << pool[r][c] << " \n"[c == n/2 -1];
}
}
return 0;
}
每讀取 2 列就輸出 1 次,使用時間約為 2 ms,記憶體約為 356 kB,通過測試。
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int n; cin >> n; // 矩陣大小 n*n
int row1[n], row2[n]; // 儲存 2 列矩陣資料
for(int r=0; r<n; r+=2) { // 依序掃過第 0 ~ n-1 列,每次跳 2 列
for(int c=0; c<n; c++) cin >> row1[c]; // 讀取 2 列
for(int c=0; c<n; c++) cin >> row2[c];
for(int c=0; c<n; c+=2) { // 依序掃過第 0 ~ n-1 欄,每次跳 2 欄
cout << max(row1[c], max(row1[c+1], max(row2[c], row2[c+1]))) << " \n"[c == n-2]; // 取 4 格中的最大值
}
}
return 0;
}
沒有留言:
張貼留言