제출 #1339134

#제출 시각아이디문제언어결과실행 시간메모리
1339134vjudge1Aliens (IOI07_aliens)C++17
0 / 100
1 ms420 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
 
int main() {
    ll N, x0, y0;
    cin >> N >> x0 >> y0;

    cout << flush;

    ll M;

    ll l = x0, r = x0, u = y0, d = y0;
    ll xs = 1, ys = 1;

    bool left_bound = true, right_bound = true, upp_bound = true, low_bound = true;

    for (int i = 1; i <= 98; i++) {
        if (left_bound) {
            string response;
            cout << "examine " << l - 1 << " " << y0 << "\n";
            cin >> response;

            if (response == "true") l--;
            else left_bound = false;
        }

        if (right_bound) {
            string response;
            cout << "examine " << r + 1 << " " << y0 << "\n";
            cin >> response;

            if (response == "true") r++;
            else right_bound = false;
        }

        if (left_bound == false && right_bound == false) break;
    }

    xs = 1;
    ys = 1;

    for (int i = 1; i <= 98; i++) {
        if (low_bound) {
            string response;
            cout << "examine " << x0 << " " << d - 1 << "\n";
            cin >> response;

            if (response == "true") d--;
            else low_bound = false;
        }

        if (upp_bound) {
            string response;
            cout << "examine " << x0 << " " << u + 1 << "\n";
            cin >> response;

            if (response == "true") u++;
            else upp_bound = false;
        }

        if (upp_bound == false && low_bound == false) break;
    }

    M = r - l;
    vector<ll> C = {r - M / 2, u - M / 2};

    ll Cx, Cy;
    int dir = 1;
    int under = 0, diagonal_size = 1;

    for (int i = 1; i <= 4; i++) {
        string res;
        cout << "examine " << C[0] + dir * i * M << " " << C[1] + dir * i * M << "\n";
        cin >> res;
        
        cout << flush;

        if (res == "false") {
            if (dir == -1) break;

            dir = -1;
            i = 1;
            continue;
        }

        if (dir == -1) under++;
        diagonal_size++;
    }

    if (diagonal_size == 5) {
        Cx = C[0] + M * (2 - under);
        Cy = C[1] + M * (2 - under);
    } else if (diagonal_size == 3) {
        string query;

        if (under == 0) {
            if (C[1] - 2 * M > 0) {
                cout << "examine " << C[0] - 2 * M << " " << C[1] << "\n";
                cin >> query;
                cout << flush;

                if (query == "true") {
                    Cx = C[0] + 2 * M;
                    Cy = C[1];
                } else {
                    Cx = C[0];
                    Cy = C[1] + 2 * M;
                }
            } else {
                Cx = C[0];
                Cy = C[1] + 2 * M;
            }
        } else if (under == 1) {
            if (C[1] + 2 * M <= N) {
                cout << "examine " << C[0] << " " << C[1] + 2 * M << "\n";
                cin >> query;
                cout << flush;

                if (query == "true") {
                    Cx = C[0] - M;
                    Cy = C[1] + M;
                } else {
                    Cx = C[0] + M;
                    Cy = C[1] - M;
                }
            } else {
                Cx = C[0] + M;
                Cy = C[1] - M;
            }
        } else {
            if (C[0] + 2 * M <= N) {
                cout << "examine " << C[0] + 2 * M << " " << C[1] << "\n";
                cin >> query;
                cout << flush;

                if (query == "true") {
                    Cx = C[0] + 2 * M;
                    Cy = C[1];
                } else {
                    Cx = C[0] - 2 * M;
                    Cy = C[1];
                }
            } else {
                Cx = C[0] - 2 * M;
                Cy = C[1];
            }
        }
    } else {
        string res;
        if (C[0] + 2 * M <= N) {
            cout << "examine " << C[0] + 2 * M << " " << C[1] << "\n";
            cin >> res;
            cout << flush;

            if (res == "true") {
                Cx = C[0] + 2 * M;
                Cy = C[1] - 2 * M;
            } else {
                Cx = C[0] - 2 * M;
                Cy = C[1] + 2 * M;
            }
        } else {
            Cx = C[0] - 2 * M;
            Cy = C[1] + 2 * M;
        }
    }

    cout << "solution " << Cx << " " << Cy << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...