This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#include "library.h"
using namespace std;
const int maxn=1000+10;
int vis[maxn],n;
vector<int>ers;
int findsar(){
for(int i=0;i<n;i++){
ers.clear();
ers.resize(n,1);
ers[i]=0;
int r=Query(ers);
if(r==1){
return i;
}
}
return 0;
}
int findbad(vector<int>r,vector<int>s){
// cout<<"wtf: "<<(int)r.size()<<" "<<s.size()<<endl;
if((int)s.size()==0){
return 0;
}
if((int)s.size()==1){
return s[0];
}
int m=(int)s.size();
m>>=1;
ers.clear();
ers.resize(n);
for(auto x:r){
ers[x]=1;
}
for(int i=0;i<m;i++){
ers[s[i]]=1;
}
int resr=Query(ers);
ers.clear();
ers.resize(n);
for(int i=0;i<m;i++){
ers[s[i]]=1;
}
int resrr=Query(ers);
if(resrr==resr){
vector<int>fake;
for(int i=0;i<m;i++){
fake.push_back(s[i]);
}
return findbad(r,fake);
}
vector<int>fake;
for(int i=m;i<(int)s.size();i++){
fake.push_back(s[i]);
}
return findbad(r,fake);
}
void Solve(int N)
{
n=N;
if(n==1){
Answer({1});
return ;
}
int av=findsar();
vector<int>res={av};
vis[av]=1;
//cout<<av<<endl;
for(int i=0;i<N-1;i++){
vector<int>all;
for(int j=0;j<n;j++){
if(vis[j]==0){
all.push_back(j);
}
}
res.push_back(findbad(res,all));
vis[res.back()]=1;
}
for(int i=0;i<n;i++){
res[i]++;
}
Answer(res);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |