#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> ask(int i);
int quanti_non_brutti;
int sol = -1;
void rec(int l, int r, int dentro, int quanti_sx, int quanti_dx) {
if (sol != -1) return;
if (r - l == 0) return;
if (dentro == 0) return;
int m = (l + r) / 2;
for (int k = m; k < r; k ++) {
auto v = ask(k);
int s = v[0], d = v[1];
if (s + d == 0) {
sol = k;
return;
}
if (s + d != quanti_non_brutti) {
continue;
}
s -= quanti_sx;
d -= quanti_dx;
rec(l, m, s, quanti_sx, quanti_dx + d);
rec(k + 1, r, d, s + quanti_sx, quanti_dx);
return;
}
rec(l, m, dentro, quanti_sx, quanti_dx);
}
int find_best(int N) {
int quanti = 0;
int ziopera;
int quanti_uguali = 0;
for (int i = 0; i < 475; i ++) {
auto v = ask(i);
int s = v[0], d = v[1];
if (s + d == quanti) quanti_uguali ++;
if (s + d > quanti) {
quanti = s + d;
ziopera = i;
quanti_uguali = 1;
}
if (s + d == 0) return i;
}
quanti_non_brutti = quanti;
// cout << "quanti_non_brutti : " << quanti_non_brutti << '\n';
// cout << "primo lombrico : " << ziopera << '\n';
rec(475, N, quanti, 474 - quanti_uguali, 0);
return sol;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |