Advertisement
leoanjos

Big Brush

Feb 20th, 2022
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.22 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define long long long int
  6.  
  7. int main() {
  8.     ios_base::sync_with_stdio(false);
  9.     cin.tie(NULL);
  10.  
  11.     int n, m;
  12.     cin >> n >> m;
  13.  
  14.     vector<vector<int>> a(n, vector<int>(m));
  15.     for (int i = 0; i < n; i++)
  16.         for (int j = 0; j < m; j++)
  17.             cin >> a[i][j];
  18.  
  19.     queue<pair<int, int>> q;
  20.     vector<vector<bool>> vis(n, vector<bool>(m, false));
  21.     vector<tuple<int, int, int>> ans;
  22.  
  23.     for (int i = 1; i < n; i++)
  24.         for (int j = 1; j < m; j++)
  25.             if (a[i][j] == a[i - 1][j - 1] && a[i][j] == a[i - 1][j] && a[i][j] == a[i][j - 1]) {
  26.                 q.emplace(i - 1, j - 1);
  27.                 vis[i - 1][j - 1] = true;
  28.                 ans.emplace_back(i, j, a[i][j]);
  29.                 a[i - 1][j - 1] = a[i - 1][j] = a[i][j - 1] = a[i][j] = 0;
  30.             }
  31.  
  32.     while (!q.empty()) {
  33.         auto [r, c] = q.front(); q.pop();
  34.         for (int i = r - 1; i <= r + 1; i++)
  35.             for (int j = c - 1; j <= c + 1; j++) {
  36.                 if (i < 0 || i + 1 >= n || j < 0 || j + 1 >= m || vis[i][j]) continue;
  37.  
  38.                 int color = a[i][j];
  39.                 if (!color) color = a[i][j + 1];
  40.                 if (!color) color = a[i + 1][j];
  41.                 if (!color) color = a[i + 1][j + 1];
  42.                 if (!color) continue;
  43.  
  44.                 if (a[i][j] && a[i][j] != color) continue;
  45.                 if (a[i][j + 1] && a[i][j + 1] != color) continue;
  46.                 if (a[i + 1][j] && a[i + 1][j] != color) continue;
  47.                 if (a[i + 1][j + 1] && a[i + 1][j + 1] != color) continue;
  48.  
  49.                 q.emplace(i, j);
  50.                 vis[i][j] = true;
  51.                 ans.emplace_back(i + 1, j + 1, color);
  52.                 a[i][j] = a[i][j + 1] = a[i + 1][j] = a[i + 1][j + 1] = 0;
  53.             }
  54.     }
  55.  
  56.     bool possible = true;
  57.     for (int i = 0; i < n && possible; i++)
  58.         for (int j = 0; j < m && possible; j++)
  59.             if (a[i][j]) possible = false;
  60.  
  61.     if (!possible) cout << "-1\n";
  62.     else {
  63.         int q = ans.size();
  64.         cout << q << "\n";
  65.  
  66.         reverse(ans.begin(), ans.end());
  67.         for (auto [i, j, c]: ans)
  68.             cout << i << " " << j << " " << c << "\n";
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement