# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1240751 | Amaarsaa | Martian DNA (IOI16_dna) | C++20 | 0 ms | 0 KiB |
#include "dna.h"
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
string analyse(int n, int t) {
string str = "";
ll lo, mid, hi, cnt;
if ( make_test(string(n, '1'))) return string(n, '1');
lo = 1;
hi = n + 1;
while (lo < hi) {
mid = (lo + hi)/2;
if ( !make_test(string(mid, '0'))) hi = mid;
else lo =mid +1;
}
lo --;
cnt = 0;
while(str.size() < n) {
string str1 = str + '1';
if ( cnt > lo) break;
if ( make_test(str1)) {
str = str1;
cnt =0;
continue;
}
str1[str1.size() - 1]= '0';
str = str1;
cnt ++;
}
// if ( cnt <= lo && str.size() == n) return str;
lo = max(str.size() - lo - 1, 1ll);
hi = str.size() + 1;
while (lo < hi) {
mid = (lo + hi)/2;
string str1 = str.substr(0, mid);
if ( make_test(str1)) lo = mid + 1;
else hi = mid;
}
lo --;
str = str.substr(0, lo);
while (str.size() < n) {
string str1 = "1" + str;
if ( !make_test(str1)) str1[0] = '0';
str = str1;
}
return str;
}