Submission #1186762

#TimeUsernameProblemLanguageResultExecution timeMemory
1186762ByeWorldPrisoner Challenge (IOI22_prison)C++20
53 / 100
9 ms1864 KiB
#include "prison.h" #include <bits/stdc++.h> #define ll long long #define fi first #define se second #define pb push_back using namespace std; typedef pair<ll,ll> pii; typedef pair<ll,pii> ipii; const int MAXN = 3e5+100; const ll INF = 2e18+10; const int LOG = 12; int n; vector<vector<int>> ANS; int cek(int i, int v){ int val = (i>>(2*v)) & 3; return val; } std::vector<std::vector<int>> devise_strategy(int N) { n = N; // cout << cek(2048,5) << ' ' <<cek(3072, 5) << " p\n"; vector<int> vec; // mulai vec.pb(0); // buka a for(int i=1; i<=n; i++){ // buka A, tulis i int val = cek(i, 6); if(val==2 || val==3) vec.pb(13 + 1); else vec.pb(12 + 1); } ANS.pb(vec); // bit -> 0 - 6 // -2 --> b lebih kecil, -1 --> a // 1-14 --> A ke B for(int j=1; j<=14; j++){ // kalo di board = j int p = j-1; int bit = p/2, ada = p%2; // 4^bit, 2/3 bukan vector<int> tem; tem.pb(1); // open b if(ada){ // 2 / 3 for(int i=1; i<=n; i++){ if(cek(i, bit)==2){ tem.pb(2*bit + 15); // = 2 / 3 } else if(cek(i,bit)==3){ tem.pb(2*bit+1 + 15); } else tem.pb(-2); // b lebih kecil } } else { // 0 / 1 for(int i=1; i<=n; i++){ if(cek(i, bit)==2 || cek(i,bit)==3){ tem.pb(-1); // a lebi kecil } else if(cek(i,bit)==0){ tem.pb(2*bit + 15); } else tem.pb(2*bit+1 + 15); // = 0/1, tanya bit } } // cout << tem.size() << "siz2\n"; ANS.pb(tem); } // 15 - 28 --> B ke A for(int j=15; j<=28; j++){ // kalo di board = j int p = j-15; // bitnya yg sblmnya int bit = p/2, big = p%2; vector<int> tem; tem.pb(0); // open a if(big){ // b bigger for(int i=1; i<=n; i++){ if(cek(i,bit) == 3 || cek(i,bit) == 1){ int b = bit-1;// lanjut int val = cek(i, b); if(val==2 || val==3) tem.pb(2*b+1 + 1); else tem.pb(2*b + 1); }else { tem.pb(-1); // a small } } } else { // b kecil for(int i=1; i<=n; i++){ if(cek(i,bit) == 2 || cek(i,bit) == 0){ int b = bit-1; // lanjut int val = cek(i, b); if(val==2 || val==3) tem.pb(2*b+1 + 1); else tem.pb(2*b + 1); } else { tem.pb(-2); // b small } } } // cout << tem.size() << "siz\n"; ANS.pb(tem); } return ANS; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...