# 搶口罩比賽 https://neoj.sprout.tw/problem/618/ ### 題目敘述 最近有句話精準道出人民心聲。 ***昔日戴口罩搶錢,今日帶錢搶口罩。*** 因此,某地決定來辦一場搶口罩大賽。規則如下: 在一個有障礙物的**正方形場地**,參賽者用口罩矇住眼睛,由旁邊的同伴指引方向。若在整個過程中 1. 沒有撞到障礙物 1. 沒有走出邊界 1. 走到口罩處 參賽者就可以得到一盒口罩! 現在,你為了自己的生命安全,決定也來參加這個比賽。但你的同伴到底會不會給出正確的方向,讓你得到一盒口罩? ### 上傳說明 你只需要完成並上傳isValid, isArrived 兩個function就可以了。 ```cpp #include <iostream> #include <cstring> using namespace std; // map info int map_size; char map[20][20]; /* 根據現在的位置與接下來的方向指令,判斷下一步合不合法。 (這個函式可用於 isArrived 裡) */ bool isValid(int current[], char dir); /* 最終是否可以成功取得口罩 */ bool isArrived(int start[], int end[], char command[]); /* Your code will be put here */ int main(){ char command[100]; int start[2]; // position: (start[0], start[1]) int end[2]; // read map size cin >> map_size; // read map for (int i=0; i<map_size; i++) for (int j=0; j<map_size; j++) cin>>map[i][j]; // read start and end position cin >> start[0] >> start[1]; cin >> end[0] >> end[1]; // read command cin >> command; if (isArrived(start, end, command)) cout<<"Get the mask"; else cout<<"Cry"; } ``` ### 輸入說明 第一行有一個 int map_size,保證2 ≤ map_size ≤ 10。代表場地為一個 map_size*map_size的正方形。 接下來輸進一個大小為 map_size*map_size 的字元二維陣列來描述場地 '.'代表普通地, 'o'代表障礙物。 再來兩行,為參賽者的起始座標與口罩的座標。座標為二維座標,因此各有兩個數值。座標表示法如下:(3*3的場地為例) ![](https://i.imgur.com/becVDuV.png) 注意:參賽起始座標與口罩座標不會有障礙物。 最後一行為一個字串,代表同伴指導的指令,R代表向右 一格,L代表向左一格, U代表向上一格, D代表向下格。 輸入已處理好,你只需要完成上面兩個function。 ### 輸出說明 根據同伴的一連串指令,判斷你最後能不能得到口罩。 若成功獲取口罩,輸出 Get the mask, 若失敗,輸出 Cry。 輸出後不需換行。 (輸出已處理好) #### 範例輸入1 ``` 5 ....o ..... ....o .o.o. ..... 1 2 4 4 URDDLDDRR ``` #### 範例輸出1 ``` Get the mask ``` #### 範例輸入2 ``` 5 .o... ..... .o..o ...o. ..... 1 2 0 3 RRUUDL ``` #### 範例輸出2 ``` Cry ``` # Code ```cpp bool isValid(int current[], char dir){ if (dir == 'L') current[1]--; if (dir == 'U') current[0]--; if (dir == 'R') current[1]++; if (dir == 'D') current[0]++; if (current[0] < 0 || current[0] > map_size - 1) return false; if (current[1] < 0 || current[1] > map_size - 1) return false; if (map[current[0]][current[1]] == 'o') return false; return true; } bool isArrived(int start[], int end[], char command[]){ for (int i = 0 ; command[i] != '\0' ; i++) { if (isValid(start , command[i])) continue; return false; } if (start[0] == end[0] && start[1] == end[1]) return true; else return false; } ```