# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
625364 | Stavab | Aliens (IOI07_aliens) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, x0, y0;
cin >> n >> x0 >> y0;
int t = 1;
while(1)
{
if(x0 - t > 0)
cout << "examine " << x0 - t << " " << y0;
else
break;
string s;
cin >> s;
if(s == "true")
t *= 2;
else
break;
}
int low = max(x0 - t, 0);
int high = x0;
while(high - low > 2)
{
int middle = (low + high) / 2;
cout << "examine " << middle << " " << y0;
string s;
cin >> s;
if(s == "true")
high = middle;
else
low = middle;
}
int xL = high;
t = 1;
while(1)
{
if(x0 + t <= n)
cout << "examine " << x0 + t << " " << y0;
else
break;
string s;
cin >> s;
if(s == "true")
t *= 2;
else
break;
}
int low = x0;
int high = min(x0 + t, n + 1);
while(high - low > 2)
{
int middle = (low + high) / 2;
cout << "examine " << middle << " " << y0 << endl;
string s;
cin >> s;
if(s == "true")
low = middle;
else
high = middle;
}
int xR = low;
int m = xR - xL + 1;
t = 1;
while(1)
{
if(y0 + t <= n)
cout << "examine " << x0 << " " << y0 + t << endl;
else
break;
string s;
cin >> s;
if(s == "true")
t *= 2;
else
break;
}
int low = y0;
int high = min(y0 + t, n + 1);
while(high - low > 2)
{
int middle = (low + high) / 2;
cout << "examine " << x0 << " " << middle << endl;
string s;
cin >> s;
if(s == "true")
low = middle;
else
high = middle;
}
int yU = low;
int yD = yU - m + 1;
int middleX = (xR + xL) / 2;
int middleY = (yU + yD) / 2;
int cornerX = middleX;
string s;
while(1)
{
if(cornerX + 2*m < n)
cout << "examine " << cornerX + 2*m << " " << middleY << endl;
else
break;
cin >> s;
if(s == "true")
cornerX += 2*m;
else
break;
}
int cornerY = middleY;
while(1)
{
if(cornerY + 2*m < n)
cout << "examine " << middleX << " " << cornerY + 2*m << endl;
else
break;
cin >> s;
if(s == "true")
cornerY += 2*m;
else
break;
}
cout << "solution " << cornerX - 2*m - m/2 << " " << cornerY - 2*m - m/2 << endl;
return 0;
}