# APCS實作題2025年10月中級第2題:航空拍照圖 > 日期:2025年11月3日 > 作者:王一哲 > [ZeroJudge 題目連結](https://zerojudge.tw/ShowProblem?problemid=r489) <br /> ## 解題想法 這題不會有兩張照片尺寸不同的問題,不需要考慮這個特例。比對時兩張照片都可以旋轉,但是某些旋轉方式的效果相同,因此只需要檢查以下 4 種狀況: 1. 都不旋轉 2. A 轉 90 度,B 轉 270 度 3. B 轉 180 度 4. A 轉 270 度,B 轉 90 度 我是用兩層 for 迴圈掃過圖片的每一格,速度比較慢一點。 <br /><br /> ## Python 程式碼 使用時間約為 56 ms,記憶體約為 3.8 MB,通過測試。 ```python= R, C = map(int, input().split()) # 照片尺寸 R*C A = [list(map(int, input().split())) for _ in range(R)] # 照片 A B = [list(map(int, input().split())) for _ in range(R)] # 照片 B cnt = [0]*4 # 4 種旋轉角度時相同的格子數量 for i in range(R): for j in range(C): if A[i][j] == B[i][j]: # 都不旋轉 cnt[0] += 1 if A[i][j] == B[i][C-j-1]: # A 轉 90 度,B 轉 270 度 cnt[1] += 1 if A[i][j] == B[R-i-1][C-j-1]: # B 轉 180 度 cnt[2] += 1 if A[i][C-j-1] == B[i][j]: # A 轉 270 度,B 轉 90 度 cnt[3] += 1 # 找最大值並輸出答案 imax = max(cnt) print(f"{100*imax//(R*C):d}%") ``` <br /> ## C++ 程式碼 使用時間約為 9 ms,記憶體約為 612 kB,通過測試。 ```cpp= #include <cstdio> #include <vector> #include <algorithm> using namespace std; int main() { int R, C; scanf("%d %d", &R, &C); // 照片尺寸 R*C vector<vector<int>> A (R, vector<int> (C)), B (R, vector<int> (C)); for(int i=0; i<R; i++) { for(int j=0; j<C; j++) { scanf("%d", &A[i][j]); } } for(int i=0; i<R; i++) { for(int j=0; j<C; j++) { scanf("%d", &B[i][j]); } } vector<int> cnt (4, 0); // 4 種旋轉角度時相同的格子數量 for(int i=0; i<R; i++) { for(int j=0; j<C; j++) { if (A[i][j] == B[i][j]) cnt[0]++; // 都不旋轉 if (A[i][j] == B[i][C-j-1]) cnt[1]++; // A 轉 90 度,B 轉 270 度 if (A[i][j] == B[R-i-1][C-j-1]) cnt[2]++; // B 轉 180 度 if (A[i][C-j-1] == B[i][j]) cnt[3]++; // A 轉 270 度,B 轉 90 度 } } printf("%d%%\n", 100*(*max_element(cnt.begin(), cnt.end())) / (R*C)); return 0; } ``` <br /><br /> --- ###### tags:`APCS`、`C++`、`Python`