Submission #143600

#TimeUsernameProblemLanguageResultExecution timeMemory
143600impetus_Xoractive (IZhO19_xoractive)C++14
6 / 100
4 ms660 KiB
#include "interactive.h" #include<bits/stdc++.h> #define mp make_pair #define pb push_back #define f first #define s second #define sz(s) (int)s.size() #define all(s) s.begin(), s.end() #define forn(i, x, y) for(int i = x; i <= y; i++) #define forev(i, y, x) for(int i = y; i >= x; i--) using namespace std; const int maxn = (int)3e5 + 100; const int mod = (int)1e9 + 7; const int P = (int)1e6 + 7; const int inf = (int)1e9 + 7; typedef pair<int, int> pii; typedef long long ll; typedef vector<int> vi; typedef vector<pii> vpii; typedef long double ld; using namespace std; /*int n, a[maxn]; int ask(int pos){ return a[pos]; } vi get_pairwise_xor(vi v){ vi cur; for(auto x : v) for(auto y : v) cur.pb(a[x] ^ a[y]); sort(all(cur)); return cur; }*/ vi clear(vi now, int kek){ while(kek--) now.erase(now.begin()); forn(i, 0, sz(now) - 1){ if(i < sz(now)) now.erase(now.begin() + i); } return now; } vi elements(vi cur){ vi now = get_pairwise_xor(cur), v; int f = ask(cur[0]); now = clear(now, sz(cur)); vi nxt = cur; nxt.erase(nxt.begin()); nxt = get_pairwise_xor(nxt); nxt = clear(nxt, sz(cur) - 1); map<int, int> was; for(auto x : nxt) was[x]++; for(auto x : now) if(was[x] % 2 == 0) v.pb(x ^ f); v.pb(f); return v; } int End[maxn]; vector<int> guess(int n) { vector <int> ans; map<int, int> pos; for(int bit = 0; bit <= 30; bit++){ vi cur; for(int i = 1; i <= n; i++){ if((i >> bit) & 1) cur.pb(i); } if(!sz(cur)) continue; if(sz(cur) == 1){ pos[ask(cur[0])] = cur[0]; End[cur[0]] = 1; continue; } if(sz(cur) == 2){ pos[ask(cur[0])] = cur[0]; pos[ask(cur[1])] = cur[1]; End[cur[0]] = End[cur[1]] = 1; continue; } vi now = elements(cur); for(auto x : now) if(!End[x]) pos[x] += (1 << bit); } ans.resize(n); for(auto x : pos) ans[x.s - 1] = x.f; return ans; }/* int main () { srand(time(0)); cin >> n; map<int,int>used; forn(i, 1, n){ int x = rand() % 10000 + 1; while(used[x]) x = rand() % 10000 + 1; a[i] = x; used[x]=1; } if(!used[0]){ a[rand()%n+1]=0; forn(i,1,n)cout<<a[i]<<" "; cout << endl; } for(auto x : guess(n)) cout << x << " "; }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...