# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
677991 | Doncho_Bonboncho | Martian DNA (IOI16_dna) | C++14 | 0 ms | 0 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 "dna.h"
#include <bits/stdc++.h>
std::string analyse(int n, int t) {
std::string nas = "";
if( !make_test( "0" ) ){
for( int i=0 ; i<n ; i++ ) nas += '1';
return nas;
}
int l = 0, r = n+1;
while( l != r-1 ){
int m = ( l + r )/2;
std::cerr<<m<<"\n";
std::string curr = "";
for( int i=0 ; i<m ; i++ ) curr += '0';
if( make_test( curr ) ) l = m;
else r = m;
}
std::cerr<<" $$ "<<numT<<"\n";
//std::cerr<<" ! "<<l<<"\n";
int maxZ = l +1;
for( int i=0 ; i<l ; i++ ) nas += '0';
l = 0, r = n+1;
while( l != r-1 ){
int m = ( l + r )/2;
std::cerr<<m<<"\n";
std::string curr = "";
for( int i=0 ; i<m ; i++ ) curr += '1';
if( make_test( curr ) ) l = m;
else r = m;
}
std::cerr<<" $$ "<<numT<<"\n";
//std::cerr<<" ! "<<l<<"\n";
int maxO = l+1;
std::cerr<<" max 0, 1 -> "<<maxZ<<" "<<maxO<<"\n";
//std::cerr<<" ^ "<<nas<<"\n";
l = 1, r = n+1;
char add = '1';
while( l ){
l = 0, r = n - nas.size() +1;
int rr;
if( add == '1' ) rr = maxO;
else rr = maxZ;
r = std::min( r, rr );
while( l != r-1 ){
int m = ( l + r ) >> 1;
std::string curr = "";
for( int i=0 ; i<m ; i++ ) curr += add;
curr = nas + curr;
if( make_test( curr ) ) l = m;
else r = m;
}
for( int i=0 ; i<l ; i++ ) nas += add;
// std::cerr<<" ^ "<<nas<<"\n";
if( add == '1' ) add = '0';
else add = '1';
}
std::cerr<<" $ "<<numT<<"\n";
l = 1;
add = '1';
while( l ){
l = 0, r = n - nas.size() +1;
int rr;
if( add == '1' ) rr = maxO;
else rr = maxZ;
r = std::min( r, rr );
// std::cerr<<" @ "<<l<<" "<<r<<"\n";
while( l != r-1 ){
int m = ( l + r ) /2;
// std::cerr<<m<<"\n";
std::string curr = "";
for( int i=0 ; i<m ; i++ ) curr += add;
curr = curr + nas;
// std::cerr<<" & "<<curr<<"\n";
if( make_test( curr ) ) l = m;
else r = m;
}
for( int i=0 ; i<l ; i++ ) nas = add + nas;
if( add == '1' ) add = '0';
else add = '1';
}
std::cerr<<" $ "<<numT<<"\n";
return nas;
}