제출 #501635

#제출 시각아이디문제언어결과실행 시간메모리
501635qwerasdfzxclMinerals (JOI19_minerals)C++14
70 / 100
42 ms2236 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; mt19937_64 rng(69), rng2(74); void Solve(int N) { vector<int> A, B, ans(N), on(N); int cur = 0; for (int i=1;i<=N*2;i++){ int tmp = Query(i); if (tmp>cur) A.push_back(i); else B.push_back(i); cur = tmp; } shuffle(A.begin(), A.end(), rng); shuffle(B.begin(), B.end(), rng2); int cnt = 0; for (int i=0;i<N;i++) if (!(i&1)){ on[i] ^= 1; if (on[i]) cnt++; else cnt--; cur = Query(B[i]); } //printf("YES\n"); for (int j=0;j<16;j++){ int cnt2 = 0; for (int i=0;i<N;i++){ int tmp = Query(A[i]); if (tmp==cur) ans[i] |= 1<<j, cnt2++; cur = tmp; if (cnt2==cnt) break; } if (j==15) break; for (int i=0;i<N;i++) if (((i>>j)&1) ^ ((i>>(j+1))&1)){ on[i] ^= 1; if (on[i]) cnt++; else cnt--; cur = Query(B[i]); } } //for (int i=0;i<N;i++) printf("%d ", ans[i]); for (int i=0;i<N;i++) Answer(A[i], B[ans[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...