LC2257 保卫格子
题面
代码
class Solution {
public:
int countUnguarded(int m, int n, vector<vector<int>>& guards, vector<vector<int>>& walls) {
// we define:
// 0: non-guarded
// 1: guarded
// 2: occupied by guard
// 3: occupied by wall
vector<vector<short>> map(m, vector<short>(n, 0));
for(auto& guard : guards) {
map[guard[0]][guard[1]] = 2;
}
for(auto& wall : walls) {
map[wall[0]][wall[1]] = 3;
}
// start simulate
for(auto& guard : guards) {
// mark horizontally
// going leftmost
for(int c = guard[1]-1; c >= 0; --c) {
if(map[guard[0]][c] == 2 || map[guard[0]][c] == 3) {
break;
} else {
map[guard[0]][c] = 1;
}
}
// going rightmost
for(int c = guard[1]+1; c < n; ++c) {
if(map[guard[0]][c] == 2 || map[guard[0]][c] == 3) {
break;
} else {
map[guard[0]][c] = 1;
}
}
// going downmost
for(int r = guard[0]-1; r >= 0; --r) {
if(map[r][guard[1]] == 2 || map[r][guard[1]] == 3) {
break;
} else {
map[r][guard[1]] = 1;
}
}
// going upmost
for(int r = guard[0]+1; r < m; ++r) {
if(map[r][guard[1]] == 2 || map[r][guard[1]] == 3) {
break;
} else {
map[r][guard[1]] = 1;
}
}
}
long long cnt = 0;
for(int i = 0; i < m; ++i) {
for(int j = 0; j < n; ++j) {
if(!map[i][j]) {
++cnt;
}
}
}
return cnt;
}
};
思路
暴力模拟
待续

浙公网安备 33010602011771号