Advertisement
pb_jiang

abc264 c

Aug 14th, 2022
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. #include <assert.h>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define dbg(...) logger(#__VA_ARGS__, __VA_ARGS__)
  5. template <typename... Args> void logger(string vars, Args &&... values)
  6. {
  7.     cerr << vars << " = ";
  8.     string delim = "";
  9.     (..., (cerr << delim << values, delim = ", "));
  10.     cerr << endl;
  11. }
  12.  
  13. template <class T> using mpq = priority_queue<T, vector<T>, greater<T>>;
  14. using ll = long long;
  15. using pii = pair<int, int>;
  16.  
  17. int h1, w1, h2, w2;
  18. int a[1 << 4][1 << 4], b[1 << 4][1 << 4];
  19.  
  20. int ans = 0;
  21. void GospersHack(int k, int n, const function<void(int)> &f)
  22. {
  23.     if (k == 0) {
  24.         f(0);
  25.         return;
  26.     }
  27.     int s = (1 << k) - 1;
  28.     int limit = (1 << n);
  29.     while (s < limit) {
  30.         f(s);
  31.         int c = s & -s;
  32.         int r = s + c;
  33.         s = (((r ^ s) >> 2) / c) | r;
  34.     }
  35. }
  36.  
  37. int main(int argc, char **argv)
  38. {
  39.     scanf("%d%d", &h1, &w1);
  40.     for (int i = 0; i < h1; ++i)
  41.         for (int j = 0; j < w1; ++j)
  42.             scanf("%d", &a[i][j]);
  43.     scanf("%d%d", &h2, &w2);
  44.     for (int i = 0; i < h2; ++i)
  45.         for (int j = 0; j < w2; ++j)
  46.             scanf("%d", &b[i][j]);
  47.     int hd = h1 - h2, wd = w1 - w2;
  48.     auto alltest = [wd, w1](int rs) {
  49.         auto ctest = [](int rs, int cs) {
  50.             int work = 1;
  51.             for (int ai = 0, bi = 0; ai < h1; ++ai) {
  52.                 if ((1 << ai) & rs)
  53.                     continue;
  54.                 for (int aj = 0, bj = 0; aj < w1; ++aj) {
  55.                     if ((1 << aj) & cs)
  56.                         continue;
  57.                     if (a[ai][aj] != b[bi][bj]) {
  58.                         work = 0;
  59.                         return;
  60.                     }
  61.                     ++bj;
  62.                 }
  63.                 ++bi;
  64.             }
  65.             ans = max(ans, work);
  66.         };
  67.         auto cbind = bind(ctest, rs, placeholders::_1);
  68.         GospersHack(wd, w1, cbind);
  69.     };
  70.  
  71.     GospersHack(hd, h1, alltest);
  72.     printf("%s\n", ans == 1 ? "Yes" : "No");
  73.     return 0;
  74. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement