This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/* Murad Eynizade */
#include <bits/stdc++.h>
#define intt long long
#define FAST_READ ios_base::sync_with_stdio(0);cin.tie(0);
#define F first
#define S second
using namespace std;
int n;
string s;
bool ask(int x,int y) {
    if (x > n || x < 1 || y > n || y < 1)return false;
    cout<<"examine "<<x<<" "<<y<<endl;
    cout<<flush;
    cin>>s;
    return (s == "true");
}
bool pos(int x,int y) {
    if (x >= n || x < 1 || y >= n || y < 1)return false;
    return true;
}
int x , y , old , rgx , lfx , m , pw , dwy , upy;
int main()
{
    FAST_READ;
    cin>>n>>x>>y;
    //Right most
    old = x; rgx = x; pw = 1;
    while (ask(x + pw , y)) {
        old = x + pw;
        pw *= 2;
    }
    int l = old , r = x + pw;
    while (l <= r) {
        int mid = l + (r - l) / 2;
        if (ask(mid , y)) {
            rgx = mid;
            l = mid + 1;
        }
        else r = mid - 1;
    }
    old = x; lfx = x; pw = 1;
    while (ask(x - pw , y)) {
        old = x - pw;
        pw *= 2;
    }
    l = x - pw; r = old;
    while (l <= r) {
        int mid = l + (r - l) / 2;
        if (ask(mid , y)) {
            r = mid - 1;
            lfx = mid;
        }
        else l = mid + 1;
    }
    m = rgx - lfx + 1;
    old = y; dwy = y; pw = 1;
    while (ask(x,y + pw)) {
        old = y + pw;
        pw *= 2;
    }
    l = old; r = y + pw;
    while (l <= r) {
        int mid = l + (r - l) / 2;
        if (ask(x,mid)) {
            l = mid + 1;
            dwy = mid;
        }
        else r = mid - 1;
    }
    upy = dwy - m + 1;
    //cout<<lfx<<" "<<rgx<<endl;
    //cout<<upy<<" "<<dwy<<endl;
    //cout<<m<<endl;
    x = lfx + (rgx - lfx) / 2;
    y = upy + (dwy - upy) / 2;
    if (ask(x + 4 * m,y)) x += 2 * m;
    else if (!(ask(x + 2 * m,y) && ask(x - 2 * m,y))) {
        if (ask(x - 4 * m,y))x -= 2 * m;
        else if (ask(x + 2 * m,y)) x += m , y += m;
        else x -= m , y += m;
    }
    if (ask(x,y + 4 * m)) y += 2 * m;
    else if (!(ask(x,y + 2 * m) && ask(x , y - 2 * m))) {
        if (ask(x,y - 4 * m))y -= 2 * m;
        else if (ask(x,y + 2 * m)) x += m , y += m;
        else x += m , y -= m;
    }
    cout<<"solution "<<x<<" "<<y<<endl;
}
| # | 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... | 
| # | 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... |