Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include "cheat.h"
- using namespace std;
- #define mp make_pair
- #define fr first
- #define sc second
- #define pb push_back
- std::vector<std::pair<std::pair<int, int>, std::pair<int, int>>> BuildPattern(int N) {
- // Your solution goes here
- pair<int,int> p[30], rv[30];
- int id[30][30];
- p[0] = mp(0,0);
- p[1] = mp(0,1);
- p[2] = mp(0,2);
- p[3] = mp(1,0);
- p[4] = mp(1,1);
- p[5] = mp(1,2);
- p[6] = mp(2,0);
- p[7] = mp(2,1);
- p[8] = mp(2,2);
- id[0][1] = 0; id[1][0] = 0; rv[0] = mp(0,1);
- id[1][2] = 1; id[2][1] = 1; rv[1] = mp(1,2);
- id[2][5] = 2; id[5][2] = 2; rv[2] = mp(2,5);
- id[5][8] = 3; id[8][5] = 3; rv[3] = mp(5,8);
- id[8][7] = 4; id[7][8] = 4; rv[4] = mp(8,7);
- id[7][6] = 5; id[6][7] = 5; rv[5] = mp(7,6);
- id[6][3] = 6; id[3][6] = 6; rv[6] = mp(6,3);
- id[3][0] = 7; id[0][3] = 7; rv[7] = mp(3,0);
- id[3][7] = 8; id[7][3] = 8; rv[8] = mp(3,7);
- id[4][8] = 9; id[8][4] = 9; rv[9] = mp(4,8);
- id[0][4] = 10; id[4][0] = 10; rv[10] = mp(0,4);
- id[1][5] = 11; id[5][1] = 11; rv[11] = mp(1,5);
- id[4][6] = 12; id[6][4] = 12; rv[12] = mp(4,6);
- id[5][7] = 13; id[7][5] = 13; rv[13] = mp(5,7);
- id[2][4] = 14; id[4][2] = 14; rv[14] = mp(2,4);
- id[1][3] = 15; id[3][1] = 15; rv[15] = mp(1,3);
- id[6][1] = 16; id[1][6] = 16; rv[16] = mp(1,6);
- id[6][5] = 17; id[5][6] = 17; rv[17] = mp(5,6);
- id[7][0] = 18; id[0][7] = 18; rv[18] = mp(0,7);
- id[7][2] = 19; id[2][7] = 19; rv[19] = mp(2,7);
- id[8][1] = 20; id[1][8] = 20; rv[20] = mp(1,8);
- id[8][3] = 21; id[3][8] = 21; rv[21] = mp(3,8);
- id[3][2] = 22; id[2][3] = 22; rv[22] = mp(2,3);
- id[5][0] = 23; id[0][5] = 23; rv[23] = mp(0,5);
- vector<pair<pair<int, int>, pair<int, int>>> ans;
- ans.pb(mp(mp(0,1),mp(1,1)));
- for(int i = 0; i <= 23; i++) {
- if(N&(1<<i)) {
- ans.pb(mp(p[rv[i].fr],p[rv[i].sc]));
- }
- }
- return ans;
- }
- int GetCardNumber(std::vector<std::pair<std::pair<int, int>, std::pair<int, int>>> P) {
- // Your solution goes here
- pair<int,int> p[30], rv[30];
- int id[30][30], rvp[30][30];
- p[0] = mp(0,0);
- p[1] = mp(0,1);
- p[2] = mp(0,2);
- p[3] = mp(1,0);
- p[4] = mp(1,1);
- p[5] = mp(1,2);
- p[6] = mp(2,0);
- p[7] = mp(2,1);
- p[8] = mp(2,2);
- id[0][1] = 0; id[1][0] = 0; rv[0] = mp(0,1);
- id[1][2] = 1; id[2][1] = 1; rv[1] = mp(1,2);
- id[2][5] = 2; id[5][2] = 2; rv[2] = mp(2,5);
- id[5][8] = 3; id[8][5] = 3; rv[3] = mp(5,8);
- id[8][7] = 4; id[7][8] = 4; rv[4] = mp(8,7);
- id[7][6] = 5; id[6][7] = 5; rv[5] = mp(7,6);
- id[6][3] = 6; id[3][6] = 6; rv[6] = mp(6,3);
- id[3][0] = 7; id[0][3] = 7; rv[7] = mp(3,0);
- id[3][7] = 8; id[7][3] = 8; rv[8] = mp(3,7);
- id[4][8] = 9; id[8][4] = 9; rv[9] = mp(4,8);
- id[0][4] = 10; id[4][0] = 10; rv[10] = mp(0,4);
- id[1][5] = 11; id[5][1] = 11; rv[11] = mp(1,5);
- id[4][6] = 12; id[6][4] = 12; rv[12] = mp(4,6);
- id[5][7] = 13; id[7][5] = 13; rv[13] = mp(5,7);
- id[2][4] = 14; id[4][2] = 14; rv[14] = mp(2,4);
- id[1][3] = 15; id[3][1] = 15; rv[15] = mp(1,3);
- id[6][1] = 16; id[1][6] = 16; rv[16] = mp(1,6);
- id[6][5] = 17; id[5][6] = 17; rv[17] = mp(5,6);
- id[7][0] = 18; id[0][7] = 18; rv[18] = mp(0,7);
- id[7][2] = 19; id[2][7] = 19; rv[19] = mp(2,7);
- id[8][1] = 20; id[1][8] = 20; rv[20] = mp(1,8);
- id[8][3] = 21; id[3][8] = 21; rv[21] = mp(3,8);
- id[3][2] = 22; id[2][3] = 22; rv[22] = mp(2,3);
- id[5][0] = 23; id[0][5] = 23; rv[23] = mp(0,5);
- int ans = 0;
- int used[30];
- bool ok = false;
- assert(P[0].fr.fr == 0 && P[0].fr.sc == 1 && P[0].sc.fr == 1 && P[0].sc.sc == 1);
- for(auto X : P) {
- int i = X.fr.fr*3+X.fr.sc;
- int j = X.sc.fr*3+X.sc.sc;
- if(i == 1 && j == 4) ok = true;
- if(i == 1 && j == 4) continue;
- ans+= (1<<id[i][j]);
- }
- assert(ok);
- return ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement