Advertisement
Guest User

Untitled

a guest
Nov 16th, 2022
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.64 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. #include "cheat.h"
  3. using namespace std;
  4. #define mp make_pair
  5. #define fr first
  6. #define sc second
  7. #define pb push_back
  8.  
  9. std::vector<std::pair<std::pair<int, int>, std::pair<int, int>>> BuildPattern(int N) {
  10.     // Your solution goes here
  11.     pair<int,int> p[30], rv[30];
  12.     int id[30][30];
  13.     p[0] = mp(0,0);
  14.     p[1] = mp(0,1);
  15.     p[2] = mp(0,2);
  16.     p[3] = mp(1,0);
  17.     p[4] = mp(1,1);
  18.     p[5] = mp(1,2);
  19.     p[6] = mp(2,0);
  20.     p[7] = mp(2,1);
  21.     p[8] = mp(2,2);
  22.     id[0][1] = 0; id[1][0] = 0; rv[0] = mp(0,1);
  23.     id[1][2] = 1; id[2][1] = 1; rv[1] = mp(1,2);
  24.     id[2][5] = 2; id[5][2] = 2; rv[2] = mp(2,5);
  25.     id[5][8] = 3; id[8][5] = 3; rv[3] = mp(5,8);
  26.     id[8][7] = 4; id[7][8] = 4; rv[4] = mp(8,7);
  27.     id[7][6] = 5; id[6][7] = 5; rv[5] = mp(7,6);
  28.     id[6][3] = 6; id[3][6] = 6; rv[6] = mp(6,3);
  29.     id[3][0] = 7; id[0][3] = 7; rv[7] = mp(3,0);
  30.  
  31.     id[3][7] = 8; id[7][3] = 8; rv[8] = mp(3,7);
  32.     id[4][8] = 9; id[8][4] = 9; rv[9] = mp(4,8);
  33.     id[0][4] = 10; id[4][0] = 10; rv[10] = mp(0,4);
  34.     id[1][5] = 11; id[5][1] = 11; rv[11] = mp(1,5);
  35.  
  36.     id[4][6] = 12; id[6][4] = 12; rv[12] = mp(4,6);
  37.     id[5][7] = 13; id[7][5] = 13; rv[13] = mp(5,7);
  38.     id[2][4] = 14; id[4][2] = 14; rv[14] = mp(2,4);
  39.     id[1][3] = 15; id[3][1] = 15; rv[15] = mp(1,3);
  40.  
  41.     id[6][1] = 16; id[1][6] = 16; rv[16] = mp(1,6);
  42.     id[6][5] = 17; id[5][6] = 17; rv[17] = mp(5,6);
  43.     id[7][0] = 18; id[0][7] = 18; rv[18] = mp(0,7);
  44.     id[7][2] = 19; id[2][7] = 19; rv[19] = mp(2,7);
  45.     id[8][1] = 20; id[1][8] = 20; rv[20] = mp(1,8);
  46.     id[8][3] = 21; id[3][8] = 21; rv[21] = mp(3,8);
  47.  
  48.     id[3][2] = 22; id[2][3] = 22; rv[22] = mp(2,3);
  49.     id[5][0] = 23; id[0][5] = 23; rv[23] = mp(0,5);
  50.  
  51.     vector<pair<pair<int, int>, pair<int, int>>> ans;
  52.     ans.pb(mp(mp(0,1),mp(1,1)));
  53.  
  54.     for(int i = 0; i <= 23; i++) {
  55.         if(N&(1<<i)) {
  56.             ans.pb(mp(p[rv[i].fr],p[rv[i].sc]));
  57.         }
  58.     }
  59.     return ans;
  60. }
  61.  
  62. int GetCardNumber(std::vector<std::pair<std::pair<int, int>, std::pair<int, int>>> P) {
  63.     // Your solution goes here
  64.     pair<int,int> p[30], rv[30];
  65.     int id[30][30], rvp[30][30];
  66.     p[0] = mp(0,0);
  67.     p[1] = mp(0,1);
  68.     p[2] = mp(0,2);
  69.     p[3] = mp(1,0);
  70.     p[4] = mp(1,1);
  71.     p[5] = mp(1,2);
  72.     p[6] = mp(2,0);
  73.     p[7] = mp(2,1);
  74.     p[8] = mp(2,2);
  75.     id[0][1] = 0; id[1][0] = 0; rv[0] = mp(0,1);
  76.     id[1][2] = 1; id[2][1] = 1; rv[1] = mp(1,2);
  77.     id[2][5] = 2; id[5][2] = 2; rv[2] = mp(2,5);
  78.     id[5][8] = 3; id[8][5] = 3; rv[3] = mp(5,8);
  79.     id[8][7] = 4; id[7][8] = 4; rv[4] = mp(8,7);
  80.     id[7][6] = 5; id[6][7] = 5; rv[5] = mp(7,6);
  81.     id[6][3] = 6; id[3][6] = 6; rv[6] = mp(6,3);
  82.     id[3][0] = 7; id[0][3] = 7; rv[7] = mp(3,0);
  83.  
  84.     id[3][7] = 8; id[7][3] = 8; rv[8] = mp(3,7);
  85.     id[4][8] = 9; id[8][4] = 9; rv[9] = mp(4,8);
  86.     id[0][4] = 10; id[4][0] = 10; rv[10] = mp(0,4);
  87.     id[1][5] = 11; id[5][1] = 11; rv[11] = mp(1,5);
  88.  
  89.     id[4][6] = 12; id[6][4] = 12; rv[12] = mp(4,6);
  90.     id[5][7] = 13; id[7][5] = 13; rv[13] = mp(5,7);
  91.     id[2][4] = 14; id[4][2] = 14; rv[14] = mp(2,4);
  92.     id[1][3] = 15; id[3][1] = 15; rv[15] = mp(1,3);
  93.  
  94.     id[6][1] = 16; id[1][6] = 16; rv[16] = mp(1,6);
  95.     id[6][5] = 17; id[5][6] = 17; rv[17] = mp(5,6);
  96.     id[7][0] = 18; id[0][7] = 18; rv[18] = mp(0,7);
  97.     id[7][2] = 19; id[2][7] = 19; rv[19] = mp(2,7);
  98.     id[8][1] = 20; id[1][8] = 20; rv[20] = mp(1,8);
  99.     id[8][3] = 21; id[3][8] = 21; rv[21] = mp(3,8);
  100.  
  101.     id[3][2] = 22; id[2][3] = 22; rv[22] = mp(2,3);
  102.     id[5][0] = 23; id[0][5] = 23; rv[23] = mp(0,5);
  103.     int ans = 0;
  104.     int used[30];
  105.     bool ok = false;
  106.     assert(P[0].fr.fr == 0 && P[0].fr.sc == 1 && P[0].sc.fr == 1 && P[0].sc.sc == 1);
  107.     for(auto X : P) {
  108.         int i = X.fr.fr*3+X.fr.sc;
  109.         int j = X.sc.fr*3+X.sc.sc;
  110.         if(i == 1 && j == 4) ok = true;
  111.         if(i == 1 && j == 4) continue;
  112.         ans+= (1<<id[i][j]);
  113.     }
  114.     assert(ok);
  115.     return ans;
  116. }
  117.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement