#include <iostream>
#include "grader.h"
using namespace std;
/*int Guess(int nr) {
cout << "Guess-ul e " << nr << '\n';
int a;
cin >> a;
return a;
}*/
int HC(int n) {
if(n == 1)
return 1;
if(n == 2) {
Guess(1);
int tip = Guess(2);
if(tip == 1) ///hotter
return 2;
return 1;
}
Guess(1);
int st = 1, dr = n;
int test = 2; ///1 --> st, 2 --> dr
int ult = 1; ///care a fost ult cel mai hot
while(st <= dr) { /// TBD!!!
int tip;
int mid = (st + dr) / 2;
if(test == 1) { ///testam st
tip = Guess(st);
if(tip == -1) { ///cold --> mutam st-ul spre dr
test = 1;
if(dr - mid == mid - st) ///same --> NU merge
st = mid + 1;
else if(mid - st < dr - mid) ///st e mai aproape --> NU merge
st = mid + 1;
else ///dr e mai aproape
st = mid;
}
else if(tip == 0) ///gg done
return mid;
else { ///hot --> mutam dr-ul mai spre st
ult = st;
test = 2;
if(dr - mid == mid - st) ///dist e same --> NU poa sa fie mid
dr = mid - 1;
else if(mid - st < dr - mid) ///st e mai aproape --> se poate mid
dr = mid;
else ///dr e mai aproape --> NU se poate mid
dr = mid - 1;
}
}
else { ///testam dr
tip = Guess(dr);
if(tip == -1) { ///cold --> mutam spre st
test = 2;
if(dr - mid == mid - st) ///dist e same --> NU poa sa fie mid
dr = mid - 1;
else if(mid - st < dr - mid) ///st e mai aproape --> se poate mid
dr = mid;
else ///dr e mai aproape --> NU se poate mid
dr = mid - 1;
}
else if(tip == 0) ///same --> fix mij, done
return mid;
else { ///hot --> mutam st-ul mai spre dr
ult = dr;
test = 1;
if(dr - mid == mid - st) ///same --> NU merge
st = mid + 1;
else if(mid - st < dr - mid) ///st e mai aproape --> NU merge
st = mid + 1;
else ///dr e mai aproape
st = mid;
}
}
}
return ult;
}
/*
int main()
{
cout << HC(8);
return 0;
}
*/
# | 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... |