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 "dango3.h"
void Answer(const std::vector<int> &a);
int Query(const std::vector<int> &x);
std::vector<int> concatena(std::vector<int> a,std::vector<int> b){
for(auto&x:b)a.push_back(x);
return a;
}
void Solve(int N, int M) {
int tot = N*M;
srand(time(0));
std::vector<int> consulta;
for(int i=0;i!=tot;++i)consulta.push_back(i+1);
std::random_shuffle(consulta.begin(),consulta.end());
int tem=tot;
bool foi[tot]={};
double soma_bloco_sz=0;
for(int i=0;i!=M;++i){
std::vector<int> base;
int limtemp=1e9;///Vai dar WA no futuro, mt baixo
int limbase=N;
int count=0;
int limita;
while(base.size()!=N){
int l=(int)(N-base.size()),r=std::min(limtemp,tem);
while(l<r){
int m = (l+r)/2;
std::vector<int> add;
for(int j=0,cur=0;j<m;++cur){
if(!foi[cur]){add.push_back(consulta[cur]);++j;}
}
++count;
int ans = Query(concatena(add,base));
if(ans>=1){
r=m;
limtemp=r;
}else {l=m+1;}
}
if(base.size()==0){
soma_bloco_sz+=r;
limita=r;
}
if((N-base.size())*4>r&&i!=M-1){///Utiliza metodo 2
for(int m=l;m!=-1;--m){
std::vector<int> add;
int puxa=-1;
for(int j=0,cur=0;j<m;++cur){
if(!foi[cur]){if(j!=m-1)add.push_back(consulta[cur]);++j;puxa=cur;}
}
++count;
int ans = Query(concatena(add,base));
if(!ans){
base.push_back(consulta[puxa]);
foi[puxa]=1;
--tem;
--limtemp;
}
}
break;
}
int puxa=-1;
for(int j=0,cur=0;j<l;++cur){
if(!foi[cur]){++j;puxa=cur;}
}
base.push_back(consulta[puxa]);
foi[puxa]=1;
--tem;
--limtemp;
}
// std::cout<<base.size()<<"!\n";
//std::cout<<count<<" "<<limita<<"\n";
Answer(base);
}
//std::cout<<(soma_bloco_sz/M)<<"\n";
}
Compilation message (stderr)
dango3.cpp: In function 'void Solve(int, int)':
dango3.cpp:26:26: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
26 | while(base.size()!=N){
| ~~~~~~~~~~~^~~
dango3.cpp:45:33: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
45 | if((N-base.size())*4>r&&i!=M-1){///Utiliza metodo 2
| ~~~~~~~~~~~~~~~~~^~
dango3.cpp:23:13: warning: unused variable 'limbase' [-Wunused-variable]
23 | int limbase=N;
| ^~~~~~~
dango3.cpp:25:13: warning: variable 'limita' set but not used [-Wunused-but-set-variable]
25 | int limita;
| ^~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |