Submission #1231517

#TimeUsernameProblemLanguageResultExecution timeMemory
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...