leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
2257.cpp (1104B)
0 class Solution {
1 public:
2 int countUnguarded(const int n, const int m, const vector<vector<int>> &guards,
3 const vector<vector<int>> &walls) const {
4 const auto idx = [m](int x, int y) { return x * m + y; };
6 bitset<100001> stop = 0, seen = 0;
7 for (const auto &wall : walls)
8 stop.set(idx(wall[0], wall[1]));
9 for (const auto &guard : guards)
10 stop.set(idx(guard[0], guard[1]));
12 static const int offset[] = {-1, 0, 1, 0, -1};
14 int res = m * n - size(walls) - size(guards);
15 for (const auto &guard : guards) {
16 for (int k = 0; k < 4; k++) {
17 int x = guard[0] + offset[k], y = guard[1] + offset[k + 1];
18 while (x >= 0 && x < n && y >= 0 && y < m) {
19 const int index = idx(x, y);
20 if (stop.test(index)) break;
21 if (!seen.test(index)) res--;
22 seen.set(index);
23 x += offset[k], y += offset[k + 1];
24 }
25 }
26 }
28 return res;
29 }
30 };