題解整理
吳邦一 HackMD (搜尋 “202306” 關鍵字)
謝一 HackMD (完整)
Coding Prep 網站 (完整)
程式怪 YouTube (完整)
海牛 Facebook (只有短評+文字解析)
P1:路徑偵測
你在二維座標系的 (0, 0),給你 n 個座標,你會按照這些座標移動,求左轉、右轉、迴轉的次數。
ZeroJudge 連結
解法:比較目前座標 (x, y) 與前次座標 (px, py) 的變化。

#include <iostream>
using namespace std;
int main(){
int n, x, y, face = 1, px, py, l = 0, r = 0, re = 0;
cin >> n;
for(int i=0; i<n; i++){
cin >> x >> y;
if(i != 0){
if(face == 1){
if(y > py) l++, face = 2;
else if(y < py) r++, face = 4;
else if(x < px) re++, face = 3;
}else if(face == 2){
if(x < px) l++, face = 3;
else if(x > px) r++, face = 1;
else if(y < py) re++, face = 4;
}else if(face == 3){
if(y < py) l++, face = 4;
else if(y > py) r++, face = 2;
else if(x > px) re++, face = 1;
}else if(face == 4){
if(x > px) l++, face = 1;
else if(x < px) r++, face = 3;
else if(y > py) re++, face = 2;
}
}
px = x, py = y;
}
cout << l << ' ' << r << ' ' << re << '\n';
}P2:特殊位置
給你 a[n][m],求離 (i, j) 曼哈頓距離為 a[i][j] 內的點數值總和 % 10 為 a[i][j] 的特殊位置。
ZeroJudge 連結
解法:硬暴即可。
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
int a[n][m];
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cin >> a[i][j];
}
}
vector<pair<int, int>> v;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
int sum = 0;
for(int x=0; x<n; x++){
for(int y=0; y<m; y++){
if((abs(i-x) + abs(j-y)) <= a[i][j]){
sum += a[x][y];
}
}
}
if(sum % 10 == a[i][j]) v.push_back({i, j});
}
}
cout << v.size() << '\n';
for(int i=0; i<v.size(); i++){
cout << v[i].first << ' ' << v[i].second << '\n';
}
}P3:磁軌移動序列
題目:ZeroJudge k733
解法:撰寫中。
P4:開啟寶盒
題目:ZeroJudge k734
解法:撰寫中。