#43773: 思路 ( c++ )


hsuchenru@gmail.com (Thinking)

學校 : 不指定學校
編號 : 210290
來源 : [118.169.6.33]
最後登入時間 :
2024-11-18 20:20:30
o712. 2. 蒐集寶石 -- 2024年10月APCS | From: [122.99.7.91] | 發表日期 : 2024-10-30 00:01

這題的結束條件只有一個:踩到了寶石數量為 0 的格子
過程重點:
1. 若該座標寶石數量不為 0 ,走過該座標時會增加 map[r][c] 的分數並且持有寶石數量 gem+1,該座標寶石數量 -1
2. 若機器人面向的格子是牆壁(下一步會撞牆) map[r][c] == -1 或是超出邊界(下一步會超出邊界) r+move<0 or r+move>m or c+move<0 or c+move>n 就會向右轉,其餘狀況維持同樣方向行走

解題過程:
移動方式 int mvt[4][2]={{0,1},{1,0},{0,-1},{-1,0}},idx=0; idx為記錄要前往哪裡
讀入 m,n,k,r,c 與 arr[m][n] 的內容
接下來就按照過程條件執行,並設定結束條件
while(arr[r][c]!=0){
        gem++;
        pt+=arr[r][c]--;
        if(pt%k==0)idx++;
        while(r+mvt[idx%4][0]<0||r+mvt[idx%4][0]>=m||c+mvt[idx%4][1]<0||c+mvt[idx%4][1]>=n||arr[r+mvt[idx%4][0]][c+mvt[idx%4][1]]==-1)idx++;
        r+=mvt[idx%4][0];c+=mvt[idx%4][1];
}
輸出 gem 寶石數量

 
ZeroJudge Forum