思路是貪心,方法就是很水的方法。
做法:
1.每次派一個機器人從(1,1)開始往右或往下,走到(24,24)為止。
2.如果當前格子有垃圾,就清除。
3.如果當前所在的格子右邊有垃圾,就往右走。否則,往下走。
4.如果走到了最下邊,就一直往右走;如果走到了最右邊,就一直往下走。
5.一個機器人走完,檢查還有沒有垃圾。有就再派一個,沒有就停止。
Right[i][j]是(i,j)右邊的垃圾數;
Down[i][j]是(i,j)下邊的垃圾數;
cnt記錄總的垃圾數;
res記錄機器人數。
Source Code
| Problem: 1548 |
|
User: yueashuxia |
| Memory: 400K |
|
Time: 0MS |
| Language: GCC |
|
Result: Accepted |
#include<stdio.h>char grid[25][25];int Right[25][25],Down[25][25];int main(){ int a, b, i, j, k, cnt = 0, res; while(scanf("%d%d", &a, &b), a != -1 || b != -1) { grid[a][b] = 1; cnt ++; for(i = 1; i < b; i ++) { Right[a][i]++; } for(i = 1; i < a; i ++) { Down[i][b]++; } if(a == 0 && b == 0) { cnt--; for(res = 0; cnt > 0; ) { res++; i = j = 1; while(i < 25 && j < 25) { if(grid[i][j] == 1) { grid[i][j] = 0; cnt--; for(k = 1; k < i; k ++) Down[k][j]--; for(k = 1; k < j; k ++) Right[i][k]--; } if(cnt == 0) break; if(Right[i][j] > 0) { if(j+1 > 24) i++; else j++; } else { if(i+1 > 24) j++; else i++; } } } printf("%d\n", res); } } return 0;}