제출 #1181030

#제출 시각아이디문제언어결과실행 시간메모리
1181030hamzabcHotter Colder (IOI10_hottercolder)C++20
75 / 100
428 ms8240 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...