Submission #250114

#TimeUsernameProblemLanguageResultExecution timeMemory
250114oolimryMinerals (JOI19_minerals)C++14
75 / 100
240 ms6004 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; int n; int cur = 0; int isbase[90000]; set<int> taken; bool in(int i){ return (taken.find(i) != taken.end()); } int query(int i){ if(!in(i)) taken.insert(i); else taken.erase(i); cur = Query(i); return cur; } vector<int> base; vector<int> other; int otherVal[90000]; void modifyBase(int bit){ for(int i = 0;i < n;i++){ if((i & (1 << bit)) == 0){ if(!in(base[i])) query(base[i]); } else{ if(in(base[i])) query(base[i]); } } //cout << bit << ": "; //for(int x : taken) cout << x << " "; //cout << "\n"; } bool check(int i){ int pre = cur; int x = other[i]; query(x); if(cur == pre) return true; else return false; return true; } void Solve(int N){ n = N; for(int i = 1;i <= 2*n;i++){ int pre = cur; int C = query(i); if(pre == C) isbase[i] = 0; else isbase[i] = 1; if(isbase[i]) base.push_back(i); else other.push_back(i); } int bit = 0; while((1<< bit) < n) bit++; bit--; for(;bit >= 0;bit--){ modifyBase(bit); for(int i = 0;i < n;i++){ if(otherVal[i] + (1<<bit) >= n) continue; if(!check(i)){ otherVal[i] += (1 << bit); } } } for(int i = 0;i < n;i++){ int B = base[otherVal[i]]; int O = other[i]; //cout << B << " " << O << "\n"; Answer(B, O); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...