제출 #1165563

#제출 시각아이디문제언어결과실행 시간메모리
1165563abcdxyz123도서관 (JOI18_library)C++20
0 / 100
32 ms412 KiB
#include"library.h" #include<bits/stdc++.h> #define maxn 1005 #define pi pair<int,int> #define fi first #define se second using namespace std; int n; int a[maxn]; int nho[maxn]; //int Query(const std::vector<int>& M){} //void Answer(const std::vector<int>& res){} int FindA1() { vector<int>mask; for(int i=1;i<=n;i++) { mask.push_back(1); } for(int i=1;i<=n;i++) { mask[i-1]=0; if(Query(mask)==1)return i; mask[i-1]=1; } assert(false); } int ask(int lim,int x) { vector<int>mask; for(int i=1;i<=lim;i++) { mask.push_back(1); } for(int i=lim+1;i<=n;i++) { mask.push_back(0); } int tmp=Query(mask); mask[x-1]=1; return Query(mask)-tmp; } int FindAdjSecond(int x,int lo,int hi) { while(hi-lo>1) { int mid=(lo+hi)/2; if(ask(mid,x)==2) { hi=mid; } else { lo=mid; } } return hi; } int FindAdjFirst(int x,int lo,int hi) { if(ask(lo,x)==1)return lo; while(hi-lo>1) { int mid=(lo+hi)/2; if(ask(mid,x)==1) { hi=mid; } else { lo=mid; } } return hi; } void Solve(int N) { n=N; a[1]=FindA1(); a[2]=FindAdjFirst(a[1],1,n); for(int i=3;i<n;i++) { int L=FindAdjSecond(a[i-1],1,n); int R=FindAdjSecond(a[i-1],1,L-1); if(a[i-2]==L)a[i]=R; else a[i]=L; } for(int i=1;i<n;i++) { nho[a[i]]=1; } for(int i=1;i<=n;i++) { if(nho[a[i]]==0) { a[n]=i; break; } } vector<int>ans; for(int i=1;i<=n;i++) { ans.push_back(a[i]); } Answer(ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...