Advertisement
MinhNGUYEN2k4

Untitled

Feb 14th, 2022
904
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.60 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. #define double long double
  4. #define Task ""
  5. #define READFILE freopen(Task".inp", "r", stdin)
  6. #define WRITEFILE freopen(Task".out", "w", stdout)
  7. #define oo 1e18
  8. #define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
  9. #define mp make_pair
  10. #define pb push_back
  11. #define fi first
  12. #define se second
  13. #define watch(x) cout << (#x) << " = " << x << endl
  14. #define debug(x) cout << (#x) << " = " << x << endl
  15. #define all(x) x.begin(), x.end()
  16. #define sz(x) x.size()
  17. #define endl '\n'
  18. #define max3(a,b,c) max(max(a, b), c)
  19. #define max4(a,b,c,d) max(max(a, b), max(c, d))
  20. #define min4(a,b,c,d) min(min(a, b), min(c, d))
  21. #define debug4(a,b,c,d) watch(a);watch(b);watch(c);watch(d)
  22. #define ever (;true;)
  23. #define maxn 505
  24.  
  25. #define PI 3.14159265
  26.  
  27. using namespace std;
  28.  
  29. typedef pair < int, int > ii;
  30. typedef pair < int, ii > iii;
  31. typedef pair < ii, ii > iiii;
  32. typedef vector < int > vi;
  33. typedef vector < ii > vii;
  34. typedef vector < vi > vvi;
  35. typedef vector < iii > viii;
  36. typedef vector < vii > vvii;
  37. typedef vector < iiii > viiii;
  38. typedef vector < vvi > vvvi;
  39.  
  40. void init(){
  41.     FAST;
  42.     if (fopen(Task".inp", "r")){
  43.         READFILE;
  44.         WRITEFILE;
  45.     }
  46. }
  47.  
  48. const int N = 1e3 + 5;
  49.  
  50. int color[N][N];
  51. bool colored[N][N];
  52. const int dx[] = {0, 0, 1, 1};
  53. const int dy[] = {0, 1, 0, 1};
  54.  
  55. void Run_case(){
  56.     int n, m;
  57.     cin >> n >> m;
  58.     for (int i = 0; i < n; ++i){
  59.         for (int j = 0; j < m; ++j){
  60.             cin >> color[i][j];
  61.         }
  62.     }
  63.     vector < iii > res;
  64.     memset(colored, 0, sizeof(colored));
  65.     auto ok = [&](ii x) -> int{
  66.         if (x.fi < 0 || x.fi > n - 2 || x.se < 0 || x.se > m - 2)
  67.             return 0;
  68.         set < int > Set;
  69.         for (int dir = 0; dir < 4; ++dir){
  70.             int X = x.fi + dx[dir], Y = x.se + dy[dir];
  71.             if (!colored[X][Y]){
  72.                 Set.insert(color[X][Y]);
  73.             }
  74.         }
  75.         if (Set.size() == 0 || Set.size() > 1) return 0;
  76.         for (int dir = 0; dir < 4; ++dir){
  77.             int X = x.fi + dx[dir], Y = x.se + dy[dir];
  78.             colored[X][Y] = 1;
  79.         }
  80.         return *Set.begin();
  81.     };
  82.     queue < ii > q;
  83.     for (int i = 0; i < n - 1; ++i){
  84.         for (int j = 0; j < m - 1; ++j){
  85.             int cur = ok(ii(i, j));
  86.             if (cur != 0){
  87.                 res.pb(iii(cur, ii(i, j)));
  88.                 q.push(ii(i, j));
  89.             }
  90.         }
  91.     }
  92.     while (q.size()){
  93.         ii u = q.front();
  94.         q.pop();
  95.         for (int DX = -1; DX < 2; DX++){
  96.             for (int DY = -1; DY < 2; DY++){
  97.                 if (DX == 0 && DY == 0) continue;
  98.                 ii v = ii(u.fi + DX, u.se + DY);
  99.                 if (v.fi < 0 || v.fi > n - 2 || v.se < 0 || v.se > m - 2)
  100.                     continue;
  101.                 int cur = ok(v);
  102.                 if (cur != 0){
  103.                     q.push(v);
  104.                     res.pb(iii(cur, v));
  105.                 }
  106.             }
  107.         }
  108.     }
  109.     for (int i = 0; i < n; ++i){
  110.         for (int j = 0; j < m; ++j){
  111.             if (!colored[i][j]){
  112.                 cout << -1 << endl;
  113.                 return;
  114.             }
  115.         }
  116.     }
  117.     cout << res.size() << endl;
  118.     for (int i = (int)res.size() - 1; i >= 0; --i)
  119.     //for (int i = 0; i < (int)res.size(); ++i)
  120.     {
  121.         cout << res[i].se.fi + 1 << ' ' << res[i].se.se + 1 << ' '
  122.         << res[i].fi << endl;
  123.     }
  124. }
  125.  
  126. void check(){
  127.     ifstream fi(".inp"), fo(".out");
  128.     int n, m;
  129.     fi >> n >> m;
  130.     int a[n][m];
  131.     for (int i = 0; i < n; ++i){
  132.         for (int j = 0; j < m; ++j){
  133.             fi >> a[i][j];
  134.         }
  135.     }
  136.     fi.close();
  137.     int k;
  138.     fo >> k;
  139.     int b[n][m];
  140.     memset(b, 0, sizeof(b));
  141.     while (k--){
  142.         int x, y, c;
  143.         fo >> x >> y >> c;
  144.         x--;
  145.         y--;
  146.         b[x][y] = c;
  147.         b[x+1][y] = c;
  148.         b[x][y+1] = c;
  149.         b[x+1][y+1] = c;
  150.         cerr << x << ' ' << y << ' ' << c << endl;
  151.         for (int i = 0; i < n; ++i){
  152.             for (int j = 0; j < m; ++j){
  153.                 cerr << b[i][j] << ' ';
  154.             }
  155.             cerr << endl;
  156.         }
  157.         cerr << endl;
  158.     }
  159.     fo.close();
  160.     bool ok = 1;
  161.     for (int i = 0; i < n && ok; ++i){
  162.         for (int j = 0; j < m && ok; ++j){
  163.             if (a[i][j] != b[i][j]) ok = 0;
  164.         }
  165.     }
  166.     if (ok) cerr << "AC";
  167.     else cerr << "WA";
  168.     exit(0);
  169. }
  170.  
  171. signed main(){
  172.     #ifndef ONLINE_JUDGE
  173.     check();
  174.     #endif // ONLINE_JUDGE
  175.     init();
  176.     int t = 1;
  177.     //cin >> t;
  178.     while (t--){
  179.         Run_case();
  180.     }
  181.     return 0;
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement