Advertisement
Korotkodul

CF 3

Aug 16th, 2022 (edited)
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <queue>
  5. #include <algorithm>
  6. #include <string>
  7. #include <stack>
  8. #include <set>
  9. #include <map>
  10. #define pii pair <int,int>
  11. #define vec vector
  12. using namespace std;
  13. using ll = long long;
  14. using ld = long double;
  15. using db = double;
  16. void cv(vector <int> &v){
  17.     for (auto x: v) cout<<x<<' ';
  18.     cout<<"\n";
  19. }
  20.  
  21. void cvl(vector <ll> &v){
  22.     for (auto x: v) cout<<x<<' ';
  23.     cout<<"\n";
  24. }
  25.  
  26.  
  27. void cvv(vector <vector <int> > &v){
  28.     for (auto x: v) cv(x);
  29.     cout<<"\n";
  30. }
  31.  
  32. void cvb(vector <bool> v){
  33.     for (bool x: v) cout<<x<<' ';
  34.     cout<<"\n";
  35. }
  36.  
  37. void cvs(vector <string>  v){
  38.     for (auto a: v){
  39.         cout<<a<<"\n";
  40.     }
  41. }
  42.  
  43. void cvp(vector <pii> a){
  44.     for (auto p: a){
  45.         cout<<p.first<<' '<<p.second<<"\n";
  46.     }
  47.     cout<<"\n";
  48. }
  49.  
  50. int t=1,n,m;
  51. vector <vector <int> > v;
  52.  
  53. bool sh=0;
  54.  
  55. void d1(int x, int y){
  56.     v[x][y]=0;
  57.     v[x+1][y]=0;
  58.     v[x][y+1]=0;
  59. }
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. int f1(int x, int y){
  68.     int r=0;
  69.     if(v[x][y]==1)r++;
  70.     if(v[x+1][y]==1)r++;
  71.     if(v[x][y+1]==1)r++;
  72.     return r;
  73. }
  74.  
  75. void d2(int x, int y){
  76.     v[x][y] = 0;
  77.     v[x+1][y]=0;
  78.     v[x][y-1]=0;
  79. }
  80.  
  81. int f2(int x, int y){
  82.     int r=0;
  83.     if(v[x][y]==1)r++;
  84.     if(v[x+1][y]==1)r++;
  85.     if(v[x][y-1]==1)r++;
  86.     return r;
  87. }
  88.  
  89. void d3(int x, int y){
  90.     v[x][y]=0;
  91.     v[x-1][y]=0;
  92.     v[x][y+1]=0;
  93. }
  94.  
  95. int f3(int x, int y){
  96.     int r=0;
  97.     if(v[x][y]==1)r++;
  98.     if(v[x-1][y]==1)r++;
  99.     if(v[x][y+1]==1)r++;
  100.     return r;
  101. }
  102.  
  103.  
  104. void d4(int x, int y){
  105.     v[x][y]=0;
  106.     v[x][y-1]=0;
  107.     v[x-1][y]=0;
  108. }
  109.  
  110.  
  111. int f4(int x, int y){
  112.     int r=0;
  113.     if(v[x][y]==1)r++;
  114.     if( v[x][y-1]==1)r++;
  115.     if(v[x-1][y]==1)r++;
  116.     return r;
  117. }
  118.  
  119. const int inf = 2e9;
  120.  
  121. bool cmp(pii a, pii b){//{nmb of 1, id oper}
  122.     return a.first < b.first || a.first == b.first && a.second > b.second;
  123. }
  124.  
  125. void slv(){
  126.     int ans=0;
  127.  
  128.     if (f4(1,1) > 0){
  129.         ans++;
  130.         d4(1,1);
  131.     }
  132.     if (f3(1,m-2) > 0){
  133.         d3(1,m-1);
  134.         ans++;
  135.     }
  136.     if (f2(n-2, 1) > 0){
  137.         d2(n-2, 1);
  138.         ans++;
  139.     }
  140.     if (f1(n-2, m-2) > 0){
  141.         d1(n-2, m-2);
  142.         ans++;
  143.     }
  144.  
  145.     for (int i = 0; i < n; ++i){
  146.         for (int j = 0; j < m; ++j){
  147.             if (i == 0 && j == 0 && i == n - 1 && j == m -1 || i == 0 && j == m - 1 || i == n - 1 && j == 0){
  148.                 continue;
  149.             }
  150.             vector <pii> can;
  151.             if (i + 1 < n && j + 1 < m){
  152.                 can.push_back({f1(i,j),1});
  153.             }
  154.             if (i + 1 < n && j - 1 > 0){
  155.                 can.push_back({f2(i,j),2});
  156.             }
  157.             if (i - 1 > 0 && j + 1 < m){
  158.                 can.push_back({f3(i,j),3});
  159.             }
  160.             if (i - 1 > 0 && j - 1 > 0){
  161.                 can.push_back({f4(i,j),4});
  162.             }
  163.             if (can.empty()){
  164.                 continue;
  165.             }
  166.             if (can[can.size() - 1].first == 0){
  167.                 continue;
  168.             }
  169.             ans++;
  170.             pii p = can[0];
  171.             if (p.second == 1){
  172.                 d1(i,j);
  173.             }
  174.             else if (p.second == 2){
  175.                 d2(i,j);
  176.             }
  177.             else if (p.second == 3){
  178.                 d3(i,j);
  179.             }
  180.             else{
  181.                 d4(i,j);
  182.             }
  183.         }
  184.     }
  185.     if (v[0][0] == 1){
  186.         ans++;
  187.         d1(0, 0);
  188.     }
  189.     if (v[0][m-1] == 1){
  190.         ans++;
  191.         d2(0,m-1);
  192.     }
  193.     if (v[n-1][0] == 1){
  194.         ans++;
  195.         d3(n - 1, 0);
  196.     }
  197.     if (v[n-1][m-1] == 1){
  198.         ans++;
  199.         d4(n-1, m-1);
  200.     }
  201.     cout<<ans<<"\n";
  202. }
  203.  
  204. int main()
  205. {
  206.     ios::sync_with_stdio(0);
  207.     cin.tie(0);
  208.     cout.tie(0);
  209.  
  210.     if (!sh) cin>>t;
  211.     for (int go = 0; go < t; ++go){
  212.         cin>>n>>m;
  213.         string s;
  214.         v.assign(n, vector <int> (m, 0));
  215.         for (int i= 0; i < n; ++i){
  216.             cin>>s;
  217.             for (int j = 0; j < m; ++j){
  218.                 v[i][j] = s[j] - '0';
  219.             }
  220.         }
  221.         if (sh){
  222.             cout<<"v\n"; cvv(v);
  223.         }
  224.         slv();
  225.     }
  226. }
  227.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement