Submission #1165661

#TimeUsernameProblemLanguageResultExecution timeMemory
1165661abcdxyz123Library (JOI18_library)C++20
19 / 100
152 ms504 KiB
#include"library.h" #include <bits/stdc++.h> using namespace std; int n; int a[2005]; int nho[2005]; int ask(vector<int>vec,int lim,int x) { if(vec.empty())return -1; vector<int>mask; for(int i=1;i<=n;i++) { mask.push_back(0); } for(int i=0;i<=lim;i++) { mask[vec[i]-1]=1; } mask[x-1]=0; int tmp=Query(mask); mask[x-1]=1; int delta =Query(mask)-tmp; if(delta==-1)return 2; else if(delta==0)return 1; else if(delta==1)return 0; } int FindAdj(int x,vector<int>vec) { if(vec.empty())return -1; int lo=0; int hi=vec.size()-1; if(ask(vec,lo,x)>=1)return vec[lo]; if(ask(vec,hi,x)==0)return -1; while(hi-lo>1) { int mid=(lo+hi)/2; if(ask(vec,mid,x)>=1) { hi=mid; } else { lo=mid; } } return vec[hi]; } void Solve(int N) { n=N; if(N==1) { vector<int>tmp; tmp.push_back(1); Answer(tmp); return ; } else if(N==2) { vector<int>tmp; tmp.push_back(1); tmp.push_back(2); Answer(tmp); return ; } int l=n; int r=n; a[l]=1; nho[1]=1; vector<int>Cand; for(int i=1;i<=n;i++) { if(nho[i])continue; Cand.push_back(i); } int tmp=FindAdj(a[l],Cand); //cout<<a[l]<<' '<<tmp<<'\n'; a[++r]=tmp; nho[tmp]=1; while(true) { vector<int>Cand; for(int i=1;i<=n;i++) { if(nho[i])continue; Cand.push_back(i); } int val=FindAdj(a[l],Cand); if(val==-1)break; nho[val]=1; a[--l]=val; } while(true) { vector<int>Cand; for(int i=1;i<=n;i++) { if(nho[i])continue; Cand.push_back(i); } int val=FindAdj(a[r],Cand); if(val==-1)break; nho[val]=1; a[++r]=val; } vector<int>ans; for(int i=l;i<=r;i++) { //cout<<a[i]<<' '; ans.push_back(a[i]); } //cout<<'\n'; Answer(ans); }

Compilation message (stderr)

library.cpp: In function 'int ask(std::vector<int>, int, int)':
library.cpp:26:1: warning: control reaches end of non-void function [-Wreturn-type]
   26 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...