Submission #1170062

#TimeUsernameProblemLanguageResultExecution timeMemory
1170062TlenekWodoruMinerals (JOI19_minerals)C++20
40 / 100
31 ms4720 KiB
#include "minerals.h" #include<bits/stdc++.h> using namespace std; void Solve(int n) { const int N=n*2; int last=0; vector<int>A,B; vector<int>L; vector<int>g(N+1); for(int i=1;i<=N;i++){g[i]=i;} mt19937 rng(2137); shuffle(g.begin()+1,g.end(),rng); for(int i=1;i<=N;i++) { int u=g[i]; int t=Query(u); if(t!=last){A.push_back(u);} else{B.push_back(u);L.push_back(A.size());} last=t; } vector<pair<int,int>>G(n); for(int i=0;i<n;i++) { G[i]={0,L[i]-1}; } vector<vector<int>>V(n); bool Gyat=1; while(true) { bool cv=0; for(int i=0;i<n;i++) { if(G[i].first==G[i].second){continue;} cv=1; const int mid=(G[i].first+G[i].second)>>1; V[mid].push_back(i); } if(cv==0){break;} if(Gyat==0) { for(int i=0;i<n;i++) { last=Query(A[i]); for(int u : V[i]) { int t=Query(B[u]); if(t==last) { G[u].second=i; } else { G[u].first=i+1; } last=t; } V[i].clear(); } } else { for(int i=n-1;i>=0;i--) { for(int u : V[i]) { int t=Query(B[u]); if(t==last) { G[u].second=i; } else { G[u].first=i+1; } last=t; } last=Query(A[i]); V[i].clear(); } } Gyat^=1; } for(int i=0;i<n;i++) { Answer(A[G[i].first],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...