Submission #1166869

#TimeUsernameProblemLanguageResultExecution timeMemory
1166869trandangquangLibrary (JOI18_library)C++20
0 / 100
22 ms460 KiB
#include"library.h"

#include<bits/stdc++.h>
using namespace std;

/// interactor's
int Query(const vector<int>& M);
void Answer(const vector<int>& res);

const int N=1010;

int n,suf[N];
vector<int> adj[N]; // adjacency on the bookshelf
vector<int> res;

void calc(int l, int r, vector<pair<int,int>>v){
    // v is vector contain pairs {index, number of indexes adjacent to it from l->r}
    if(l>r) return;
    if(l==r){
        for(pair<int,int> i:v) adj[i.first].emplace_back(l), adj[l].emplace_back(i.first);
        return;
    }
    int mid=(l+r)>>1, tmp=0;
    vector<int> q(n);
    for(int i=mid+1; i<n; ++i) q[i]=1;

    vector<pair<int,int>> vL,vR;
    for(pair<int,int> i:v){
        if(i.first>=mid+1) vR.emplace_back(i);
        else{
            q[i.first]=1;
            int x=Query(q);
            if(i.second-(x+tmp-1)>0) vL.emplace_back(i.first,i.second-(x+tmp-1));
            if(x+tmp-1>0) vR.emplace_back(i.first,x+tmp-1);
            q[i.first]=0;
        }
    }
    calc(l,mid,vL); calc(mid+1,r,vR);
}
void dfs(int u, int p){
    res.emplace_back(u);
    for(int v:adj[u]) if(v!=p){
        dfs(v,u);
    }
}
void Solve(int N){
    n=N;
    if(n==1) return Answer({1}),void();

    vector<pair<int,int>> s;

    // suf[i]: number of components when took book from i->n-1
    vector<int> q(n);
    suf[n-1]=1; q[n-1]=1;
    for(int i=n-2; i>=0; --i){
        q[i]=1;
        suf[i]=Query(q);
        if(suf[i+1]-suf[i]+1>0) s.emplace_back(i,suf[i+1]-suf[i]+1);
    }
    calc(0,n-1,s);
    for(int i=0; i<n; ++i){
        if(adj[i].size()==1){
            dfs(i,i);
            break;
        }
    }
    Answer(res);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...