Advertisement
he_obviously

1249-timus

May 29th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #pragma GCC optimize("Ofast")
  2. #pragma GCC target("sse,sse2,sse3,ssse3,sse3,avx,avx2,popcnt,tune=native")
  3. #pragma comment(linker, "/STACK:367077216")
  4. #pragma GCC optimize("unroll-loops")
  5.  
  6. #include <iostream>
  7. #include <cmath>
  8. #include <vector>
  9. #include <set>
  10. #include <map>
  11. #include <algorithm>
  12. #include <queue>
  13. #include <iomanip>
  14.  
  15. using namespace std;
  16.  
  17. typedef long long ll;
  18.  
  19. int main() {
  20.    
  21.     int n, m;
  22.     cin >> n >> m;
  23.  
  24.     vector <int> prev(m + 1, 0), cur(m + 1, 0), prev_s(m + 1, 0), cur_s(m + 1, 0);
  25.     for (int i = 1; i <= m; ++i) {
  26.         cin >> prev[i];
  27.         prev_s[i] = prev_s[i - 1] + prev[i];
  28.     }
  29.  
  30.     vector <int> prev_g, cur_g;
  31.     for (int i = 1; i <= m; ++i) {
  32.         if (prev[i] == 1 && prev[i - 1] == 0) {
  33.             prev_g.push_back(i);
  34.         }
  35.         if (prev[i] == 1 && (i == m || prev[i + 1] == 0)) {
  36.             prev_g.push_back(i);
  37.         }
  38.     }
  39.  
  40.     for (int step = 1; step < n; ++step) {
  41.  
  42.         for (int i = 1; i <= m; ++i) {
  43.             cin >> cur[i];
  44.             cur_s[i] = cur_s[i - 1] + cur[i];
  45.         }
  46.  
  47.         for (int i = 1; i <= m; ++i) {
  48.             if (cur[i] == 1 && cur[i - 1] == 0) {
  49.                 cur_g.push_back(i);
  50.             }
  51.             if (cur[i] == 1 && (i == m || cur[i + 1] == 0)) {
  52.                 cur_g.push_back(i);
  53.             }
  54.         }
  55.        
  56.         for (int i = 1; i < (int)prev_g.size(); i += 2) {
  57.             if (cur_s[prev_g[i]] - cur_s[prev_g[i - 1] - 1] == 0) {
  58.                 continue;
  59.             }
  60.             else if (cur_s[prev_g[i]] - cur_s[prev_g[i - 1] - 1] == prev_g[i] - prev_g[i - 1] + 1 &&
  61.                 (cur[prev_g[i - 1] - 1] == 0) && (prev_g[i] == m || cur[prev_g[i] + 1] == 0)) {
  62.                 continue;
  63.             }
  64.             else {
  65.                 cout << "No";
  66.                 return 0;
  67.             }
  68.         }
  69.  
  70.         prev = cur;
  71.         prev_s = cur_s;
  72.         prev_g = cur_g;
  73.         cur_g.clear();
  74.  
  75.     }
  76.  
  77.     cout << "Yes";
  78.  
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement