Ankit_132

D

Oct 1st, 2023
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.00 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.  
  8.     vector<vector<string>> x(3, vector<string> (4));
  9.     vector<vector<string>> s(3, vector<string> (4));
  10.  
  11.     for(int i=0; i<3; i++)
  12.     {
  13.         for(int j=0; j<4; j++)
  14.             cin>>x[i][j];
  15.     }
  16.  
  17.     int f = 0;
  18.     vector<vector<int>> vis(4, vector<int> (4));
  19.  
  20.     auto Fill = [&](vector<string> &t, int x, int y, int p, int q)
  21.     {
  22.         for(int i=0, r, c; i<4; i++)
  23.         {
  24.             for(int j=0; j<4; j++)
  25.             {
  26.                 if(t[i][j]=='#')
  27.                 {
  28.                     r = i - p + x;
  29.                     c = j - q + y;
  30.  
  31.                     if(r<0 || r>3 || c<0 || c>3 || vis[r][c])     return 0;
  32.  
  33.                     vis[r][c] = 1;
  34.                 }
  35.             }
  36.         }
  37.  
  38.         return 1;
  39.     };
  40.  
  41.     auto check = [&](vector<string> &a, vector<string> &b, vector<string> &c)
  42.     {
  43.         int ok = 1;
  44.         for(int i=0; i<4; i++)
  45.         {
  46.             for(int j=0; j<4; j++)
  47.                 vis[i][j] = 0;
  48.         }
  49.  
  50.         ///a
  51.         {
  52.             int p=-1, q;
  53.             for(int i=0; i<4 && p==-1; i++)
  54.             {
  55.                 for(int j=0; j<4; j++)
  56.                 {
  57.                     if(a[i][j]=='#')
  58.                     {
  59.                         p=i, q=j;
  60.                         break;
  61.                     }
  62.                 }
  63.             }
  64.  
  65.             ok &= Fill(a, 0, 0, p, q);
  66.         }
  67.  
  68.         ///b
  69.         {
  70.             int i1=-1, j1;
  71.             for(int i=0; i<4 && i1==-1; i++)
  72.             {
  73.                 for(int j=0; j<4; j++)
  74.                 {
  75.                     if(!vis[i][j])
  76.                     {
  77.                         i1=i, j1=j;
  78.                         break;
  79.                     }
  80.                 }
  81.             }
  82.             int p=-1, q;
  83.             for(int i=0; i<4 && p==-1; i++)
  84.             {
  85.                 for(int j=0; j<4; j++)
  86.                 {
  87.                     if(b[i][j]=='#')
  88.                     {
  89.                         p=i, q=j;
  90.                         break;
  91.                     }
  92.                 }
  93.             }
  94.  
  95.             ok &= Fill(b, i1, j1, p, q);
  96.         }
  97.  
  98.         ///c
  99.         {
  100.             int i1=-1, j1;
  101.             for(int i=0; i<4 && i1==-1; i++)
  102.             {
  103.                 for(int j=0; j<4; j++)
  104.                 {
  105.                     if(!vis[i][j])
  106.                     {
  107.                         i1=i, j1=j;
  108.                         break;
  109.                     }
  110.                 }
  111.             }
  112.             int p=-1, q;
  113.             for(int i=0; i<4 && p==-1; i++)
  114.             {
  115.                 for(int j=0; j<4; j++)
  116.                 {
  117.                     if(c[i][j]=='#')
  118.                     {
  119.                         p=i, q=j;
  120.                         break;
  121.                     }
  122.                 }
  123.             }
  124.  
  125.             ok &= Fill(c, i1, j1, p, q);
  126.         }
  127.  
  128.         for(int i=0; i<4; i++)
  129.         {
  130.             for(int j=0; j<4; j++)
  131.                 ok &= vis[i][j];
  132.         }
  133.  
  134.         return ok;
  135.     };
  136.  
  137.     auto Rotate = [&](vector<string> &t)
  138.     {
  139.         for(int i=0; i<2; i++)
  140.         {
  141.             for(int j=i; j <4-i-1; j++)
  142.             {
  143.                 int temp = t[i][j];
  144.                 t[i][j] = t[4 - 1 - j][i];
  145.                 t[4 - 1 - j][i] = t[4 - 1 - i][4 - 1 - j];
  146.                 t[4 - 1 - i][4 - 1 - j] = t[j][4 - 1 - i];
  147.                 t[j][4 - 1 - i] = temp;
  148.             }
  149.         }
  150.     };
  151.  
  152.     for(int i=0; i<4 && !f; i++)
  153.     {
  154.         for(int j=0; j<4 && !f; j++)
  155.         {
  156.             for(int k=0; k<4 && !f; k++)
  157.             {
  158.                 s = x;
  159.  
  160.                 sort(s.begin(), s.end());
  161.  
  162.                 do{
  163.                    f |= check(s[0], s[1], s[2]);
  164.                 }while(!f && next_permutation(s.begin(), s.end()));
  165.  
  166.                 Rotate(x[2]);
  167.             }
  168.             Rotate(x[1]);
  169.         }
  170.         Rotate(x[0]);
  171.     }
  172.  
  173.     if(f)       cout<<"Yes\n";
  174.     else        cout<<"No\n";
  175. }
  176.  
Advertisement
Add Comment
Please, Sign In to add comment