제출 #167302

#제출 시각아이디문제언어결과실행 시간메모리
167302ho94949Minerals (JOI19_minerals)C++17
0 / 100
2 ms376 KiB
#include "minerals.h" #include<bits/stdc++.h> using namespace std; const int MAXN = 43000; bool is_in[MAXN]; int last = 0; int Q(int x) { is_in[x] = !is_in[x]; return last = Query(x); } void recur(vector<int> A, vector<int> B) { assert(A.size() == B.size()); int N = A.size(); assert(N >= 1); if(N==1) { Answer(A[0], B[0]); return; } int M = N/2; vector<int> fA, fB, sA, sB; for(int i=0; i<M; ++i) { fA.push_back(A[i]); Q(A[i]); assert(is_in[A[0]] == is_in[A[i]]); } bool is_fA_inside = is_in[A[0]]; for(int i=M; i<N; ++i) { sA.push_back(A[i]); } int i = 0; while(fB.size() != fA.size() && sB.size() != sA.size()) { int plast = last; Q(B[i]); if(is_fA_inside == (last == plast) ) fB.push_back(B[i]); else sB.push_back(B[i]); ++i; } while(fB.size() != fA.size()) fB.push_back(B[i++]); while(sB.size() != sA.size()) sB.push_back(B[i++]); recur(fB, fA); recur(sB, sA); } void Solve(int N) { vector<int> V, W; for(int i=1; i<=N; ++i) V.push_back(i); for(int i=N+1; i<=2*N; ++i) W.push_back(i); recur(V, W); }
#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...