Submission #250111

#TimeUsernameProblemLanguageResultExecution timeMemory
250111oolimryMinerals (JOI19_minerals)C++14
70 / 100
241 ms5876 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)){ 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); } for(int bit = 0;(1 << bit) < n;bit++){ modifyBase(bit); for(int i = 0;i < n;i++){ 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...