#ifndef LOCAL
#include "grader.h"
#endif
#include <bits/stdc++.h>
using namespace std;
int max(int a, int b){
if (a > b)
return a;
return b;
}
int min(int a, int b){
if (a < b)
return a;
return b;
}
int HC(int N){
int l = 1, r = N, gl = max(1, (l + r - 1) >> 1), gr = min(N, gl + 2), k = 0;
Guess(gl);
int d = Guess(gr);
while (l != r){
if (d == 0){
return (gl + gr) >> 1;
}else if (d == 1){
if (k == 0){
l = (gl + gr) / 2 + 1;
if (min(r, l + r - gr) > gr){
gl = gr;
gr = min(r, l + r - gr);
d = Guess(gr);
k = 1;
}else{
gl = min(r, l + r - gr);
d = Guess(gl);
}
}else{
r = (gl + gr - 1) / 2;
if (max(l, l + r - gl) < gl){
gr = gl;
gl = max(l, l + r - gl);
d = Guess(gl);
}else{
gr = max(l, l + r - gl);
d = Guess(gr);
}
}
k = 1 - k;
}else{
if (k == 0){
r = max(1, (gl + gr - 1) / 2);
if (gr == gl + 2){
gl = max(l, l + r - gr);
d = Guess(gl);
}else{
gl = max(l, (l + r - 1) >> 1);
gr = min(r, gl + 2);
Guess(gl);
d = Guess(gr);
k = 1;
}
}else{
l = min(N, (gl + gr) / 2 + 1);
if (gr == gl + 2){
gr = min(r, l + r - gl);
d = Guess(gr);
}else{
gl = max(l, (l + r - 1) >> 1);
gr = min(r, gl + 2);
Guess(gl);
d = Guess(gr);
k = 1;
}
}
k = 1 - k;
}
if (l > r || gl > gr){
cerr << "error " << l << " " << r << " " << gl << " " << gr << endl;
exit(-1);
}
}
return l;
}
# | 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... |