제출 #1231517

#제출 시각아이디문제언어결과실행 시간메모리
1231517MarwenElarbiPark (JOI17_park)C++20
10 / 100
418 ms852 KiB
#include "park.h" #include <bits/stdc++.h> using namespace std; static int Place[1400]; int cnt=0; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int n; int ans[1405]; void daq(int l,int r,vector<int> v){ if(l>r) return; if(l==r){ ans[l]=v.back(); return; }else if(r==1&&l==0){ ans[0]=0; ans[1]=(v.back()==0 ? v[0] : v[1]); return; } int mid=uniform_int_distribution<int>(0,(int)v.size()-1)(rng); while(v[mid]==0) mid=uniform_int_distribution<int>(0,(int)v.size()-1)(rng); int y=v[mid]; vector<int> v1; vector<int> v2; for (int i = 0; i < v.size(); ++i) { if(v[i]==0||v[i]==y){ v1.push_back(v[i]); continue; } Place[v[i]]=0; cnt++; assert(cnt<30000); if(Ask(0,y,Place)) v2.push_back(v[i]); else v1.push_back(v[i]); Place[v[i]]=1; } daq(l,l+v1.size()-1,v1); daq(l+v1.size(),r,v2); } void Detect(int T, int N){ n=N; vector<int> v; for (int i = 0; i < n; ++i) { Place[i]=1; v.push_back(i); } shuffle(v.begin(),v.end(),rng); ans[0]=0; ans[n-1]=n-1; daq(0,n-1,v); for (int i = 1; i < n; ++i) { int x=ans[i-1]; int y=ans[i]; if(x>y) swap(x,y); Answer(x,y); } return; }
#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...