## pD. 踩泥巴 - Blame 標籤 : **陣列** - **題目** [TOJ 779](https://toj.tfcis.org/oj/contests/13/pro/779/) - **題解** :::success **這題算是簡單的二維陣列實作** **只要稍微讀懂題目再下去實作即可** ::: - **程式碼** :::danger **因為是OI賽制,所以會有子任務分數** **出題者希望大家就算想不出來正解也能養成喇分數的習慣** **子任務應該都出的很佛 (?** **但個別子任務拿法都很諧咖就是了XD** ::: :::spoiler **子任務1 (5/100)** **看一下範例測資** **可以輕鬆發現第一個數字就可以判斷了** ```cpp= #include <iostream> using namespace std; int main() { int n; cin >> n; if(n == 5) cout << "No\n"; else cout << "Yes\n"; } ``` **輕鬆5分** ::: :::spoiler **子任務2(50/100)** **因為沒有泥巴地,所以只要模擬有沒有走出邊界就行** ```cpp= #include <iostream> using namespace std; int main() { int n, m, k; cin >> n >> m >> k; int x, y; cin >> x >> y; string s; cin >> s; bool ok = true; for(int i = 0; i < k; i++) { char c = s[i]; if(c == 'L') y--; if(c == 'R') y++; if(c == 'U') x--; if(c == 'D') x++; if(x < 1 || x > n || y < 1 || y > n) ok = false; } if(ok == false) cout << "Yes\n"; // 踩到了 else cout << "No\n"; } ``` **搭配上一個子任務解法** **輕鬆賺取55分** ::: :::spoiler **子任務三 (20/100)** **開始點四周皆為泥巴地** **又 $K \ge 1$ 則肯定會踩到** ```cpp= #include <iostream> using namespace std; int main() { cout << "Yes\n"; } ``` **爽賺20分!** ::: :::spoiler **子任務四 (100/100)** ```cpp= #include <iostream> using namespace std; int v[50][4]; int main() { int n, m, k; cin >> n >> m >> k; for(int i = 0; i < m; i++) for(int j = 0; j < 4; j++) cin >> v[i][j]; int x, y; cin >> x >> y; string s; cin >> s; bool ok = true; for(int i = 0; i < k; i++) { char c = s[i]; if(c == 'U') x--; if(c == 'D') x++; if(c == 'L') y--; if(c == 'R') y++; if(x < 1 || x > n || y < 1 || y > n) ok = false; for(int j = 0; j < m; j++) { if(x >= v[j][0] && x <= v[j][2] && y >= v[j][1] && y <= v[j][3]) ok = false; } } if(ok) cout << "No\n"; // 沒踩到 else cout << "Yes\n"; } ``` :::