제출 #997320

#제출 시각아이디문제언어결과실행 시간메모리
99732012345678Minerals (JOI19_minerals)C++17
40 / 100
14 ms5328 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; const int nx=5e4+5; int n, p, c, l[nx], r[nx], t; vector<int> used, v, qrs[nx]; void Solve(int N) { v.push_back(0); used.push_back(0); for (int i=1; i<=2*N; i++) { c=Query(i); if (c==p) v.push_back(i); else used.push_back(i), p=c; } //for (int i=1; i<=N; i++) cout<<i<<' '<<v[i]<<' '<<used[i]<<'\n'; for (int i=1; i<=N; i++) Query(v[i]); for (int i=1; i<=N; i++) l[i]=1, r[i]=N; while (++t) { bool f=1; for (int i=1; i<=N; i++) qrs[i].clear(); for (int i=1; i<=N; i++) if (l[i]!=r[i]) f=0, qrs[(l[i]+r[i])/2].push_back(i); if (f) break; //cout<<"bsearch\n"; //for (int i=1; i<=N; i++) cout<<i<<' '<<v[i]<<' '<<l[i]<<' '<<r[i]<<'\n'; if (t%2) { for (int i=N; i>=1; i--) { for (auto x:qrs[i]) { if (Query(v[x])==i) r[x]=i; else l[x]=i+1; Query(v[x]); } Query(used[i]); } } else { for (int i=1; i<=N; i++) { Query(used[i]); for (auto x:qrs[i]) { if (Query(v[x])==i) r[x]=i; else l[x]=i+1; p=Query(v[x]); } } } } for (int i=1; i<=N; i++) Answer(v[i], used[l[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...