Advertisement
tepyotin2

Bull in a China Shop solution

Jan 4th, 2024 (edited)
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<string> superimpose(vector<string> &a, vector<string> &b) {
  5.   int n = (int) a.size();
  6.   vector<string> res(n, string(n, '.'));
  7.   for (int i = 0; i < n; ++i) {
  8.     for (int j = 0; j < n; ++j) {
  9.       if (a[i][j] == '#' || b[i][j] == '#') {
  10.         res[i][j] = (a[i][j] == b[i][j] ? '1' : '#');
  11.       }
  12.     }
  13.   }
  14.   return res;
  15. }
  16.  
  17. bool shift(vector<string> &a, int v, int h) {
  18.   int n = (int) a.size();
  19.   vector<string> b(n, string(n, '.'));
  20.   for (int i = 0; i < n; ++i) {
  21.     for (int j = 0; j < n; ++j) {
  22.       if (a[i][j] == '#') {
  23.         if (i + v < 0 || i + v > n - 1 || j + h < 0 || j + h > n - 1) {
  24.           return false;
  25.         }
  26.         b[i + v][j + h] = '#';
  27.       }
  28.     }
  29.   }
  30.   a = b;
  31.   return true;
  32. }
  33.  
  34. int main () {
  35.   ios_base::sync_with_stdio(false);
  36.   cin.tie(0);
  37.   freopen("bcs.in", "r", stdin);
  38.   freopen("bcs.out", "w", stdout);
  39.   int n, K;
  40.   cin >> n >> K;
  41.   vector<string> a(n);
  42.   for (int i = 0; i < n; ++i) {
  43.     cin >> a[i];
  44.   }
  45.   vector<vector<string>> b(K, vector<string>(n));
  46.   for (int i = 0; i < K; ++i) {
  47.     for (int j = 0; j < n; ++j) {
  48.       cin >> b[i][j];
  49.     }
  50.   }
  51.   for (int i = 0; i < K; ++i) {
  52.     for (int j = i + 1; j < K; ++j) {
  53.       for (int k = -n; k < n; ++k) {
  54.         for (int l = -n; l < n; ++l) {
  55.           for (int q = -n; q < n; ++q) {
  56.             for (int p = -n; p < n; ++p) {
  57.               vector<string> c = b[i];
  58.               vector<string> d = b[j];
  59.               if (shift(c, k, l) && shift(d, q, p)) {
  60.                 vector<string> e = superimpose(c, d);
  61.                 if (e == a) {
  62.                   cout << i + 1 << " " << j + 1 << '\n';
  63.                   return 0;
  64.                 }
  65.               }
  66.             }
  67.           }
  68.         }
  69.       }
  70.     }
  71.   }
  72.   return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement