# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
940840 | Doncho_Bonboncho | Super Dango Maker (JOI22_dango3) | C++17 | 10050 ms | 604 KiB |
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 "dango3.h"
#include <bits/stdc++.h>
using namespace std;
#ifndef LOCAL
#define cerr if(false)cerr
#endif
#define out(x) #x << " = " << x << " "
int n;
void f( int currBr, std::vector< int > v ){
if( currBr == 1 ){
if( v.size() != n ) while( true );
Answer( v );
return;
}
int l = 0, r = v.size();
while( l != r-1 ){
std::vector< int > V;
int m = ( l + r ) >> 1;
for( int i=0 ; i <= m ; i++ ) V.push_back( v[i] );
if( Query( V ) < currBr/2 ) l = m;
else r = m;
}
std::vector< int > firRet;
std::vector< int > secRet;
for( int i=0 ; i <= r ; i++ ) firRet.push_back( v[i] );
for( int i=r+1 ; i < v.size() ; i++ ) secRet.push_back( v[i] );
for( int i=0 ; i < firRet.size() ; i++ ){
int currRem = firRet[i];
std::swap( firRet[i], firRet[firRet.size() -1] );
firRet.pop_back();
if( Query( firRet ) != currBr/2 ){
firRet.push_back( currRem );
std::swap( firRet[i], firRet[firRet.size() -1] );
}else secRet.push_back( currRem );
}
f( currBr /2, firRet );
f( currBr /2 + ( currBr & 1 ), secRet );
}
void Solve(int N, int M) {
n = N;
std::vector< int > v;
for( int i=1 ; i<=N*M ; i++ ) v.push_back( i );
f( M, v );
}
Compilation message (stderr)
# | 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... |