제출 #514945

#제출 시각아이디문제언어결과실행 시간메모리
514945kostia244Minerals (JOI19_minerals)C++17
80 / 100
43 ms2540 KiB
#include "minerals.h" #include<bits/stdc++.h> using namespace std; bitset<90000> on; int uwusgi(int x) { on.flip(x); return Query(x); } #define Query uwusgi void Solve(int N) { vector<int> A, B, C(N), V; for(int lst = 0, i = 1; i <= 2*N; i++) { int cc = Query(i); if(cc == lst) { V.push_back(A.size()); } (cc==lst ? B : A).push_back(i); lst = cc; } // int CC = 0; for(int b = 0; b < 16; b++) { int lst = 0; for(int i = 0; i < N; i++) if(((i>>b)&1)^on[A[i]]) lst = Query(A[i]); vector<int> cnt(1<<16), cnto(1<<16); for(auto i : C) cnt[i]++; for(int i = 0; i < 1<<b; i++) { for(int j = 0; j < 1<<(16-b); j++) { int c = i | (j<<b); if(c<N) cnto[i] += j&1; } } for(int i = 0; i < N; i++) { if((C[i]|(1<<b)) > V[i]) continue; if(--cnt[C[i]]) { int qq = Query(B[i]); if(lst == qq) cnto[C[i]]--; C[i] |= (lst == qq)<<b; lst = qq; } else { C[i] |= cnto[C[i]]<<b; } } // for(auto i : C) cout << i << " "; cout << endl; } for(int i = 0; i < N; i++) Answer(A[C[i]], B[i]); }
#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...