이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
using namespace std;
long long n;
long long last;
long long plast;
bool lastAnswer;
int ask(long long x)
{
cout << "? " << x << endl;
int v;
cin >> v;
return v;
}
void ask4(long long x)
{
plast = last;
last = x;
lastAnswer = ask(x);
}
void giveAnswer(long long x)
{
cout << "= " << x << endl;
}
long long mas[70];
int main()
{
cin >> n;
int i = 0;
mas[0] = n;
if (mas[0] > 2)
{
while (mas[i] > 4)
{
i++;
mas[i] = mas[i - 1] / 2 + mas[i - 1] % 2;
}
bool aug = true;
long long f = 2;
for (int j = i - 1; j >= 0; j--)
{
aug = !aug;
if (!aug)
{
f = mas[j] + f - mas[j+1];
}
}
long long add2 = 0;
ask4(f);
for (int j = 0; j < i; j++)
{
long long g = mas[j] - mas[j+1] + add2;
if (aug)
{
ask4(last + g);
}
else
{
ask4( last - g);
}
if (!lastAnswer)
{
add2 += mas[j] - mas[j+1];
}
aug = !aug;
}
if (mas[i] == 3)
{
ask4(last + add2 + 1);
if (!lastAnswer)
{
ask4(last - add2 - 2);
if (lastAnswer)
{
giveAnswer(add2 + 2);
}
else
{
giveAnswer(add2 + 3);
}
}
else
{
giveAnswer(add2+1);
}
}
else if (mas[i] == 4)
{
ask4(last + add2 + 2);
if (lastAnswer)
{
ask4(last - add2 - 1);
if (lastAnswer)
{
giveAnswer(add2 + 1);
}
else
{
giveAnswer(add2 + 2);
}
}
else
{
ask4(last - add2 - 3);
if (lastAnswer)
{
giveAnswer(add2+3);
}
else
{
giveAnswer((add2 + 4));
}
}
}
}
else
{
ask4(1);
ask4(2);
if (lastAnswer)
{
giveAnswer(1);
}
else
{
giveAnswer(2);
}
}
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |