답안 #234991

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
234991 2020-05-26T14:57:40 Z nicolaalexandra Aliens (IOI07_aliens) C++14
100 / 100
7 ms 384 KB
#include <bits/stdc++.h>

using namespace std;
long long n,m,x,y;
int query (long long x, long long y){
    cout<<"examine "<<x<<" "<<y<<endl;
    string ans;
    cin>>ans;
    if (ans == "true")
        return 1;
    return 0;
}
int main (){

    cin>>n>>x>>y;

    /// vreau sa determin coordonatele coltului patratului mic din care face parte x,y

    long long st = 0, dr = n - y, sol = 0;
    while (st <= dr){
        long long mid = (st+dr)>>1;
        if (query(x,y+mid) == 0) /// clar ma aflu prea sus
            dr = mid-1;
        else {
            /// testez mijlocul
            if (y + mid != (2*y+mid)/2 && query (x,(2*y+mid)/2) == 0) /// tot prea sus
                dr = mid-1;
            else {
                int mid2 = (2*y+mid)/2;
                if (y+mid != (y+mid2)/2 && (2*y+mid)/2 != (y+mid2)/2 && query(x,(y+mid2)/2) == 0)
                    dr = mid-1;
                else {
                    sol = mid;
                    st = mid+1;
                }}}}

    y += sol;

    st = 0, dr = x-1, sol = 0;
    while (st <= dr){
        long long mid = (st+dr)>>1;
        if (query (x-mid,y) == 0)
            dr = mid-1;
        else {
            if (x-mid != (2*x-mid)/2 && query((2*x-mid)/2,y) == 0)
                dr = mid-1;
            else {
                int mid2 = (2*x-mid)/2;
                if (x-mid != (x+mid2)/2 && (2*x-mid)/2 != (x+mid2)/2 && query((x+mid2)/2,y) == 0)
                    dr = mid-1;
                else {
                    sol = mid;
                    st = mid+1;
                }}}}
    x -= sol;

    /// acum determin M ul la fel
    st = 0, dr = y-1, sol = 0;
    while (st <= dr){
        long long mid = (st+dr)>>1;
        if (query(x,y-mid) == 0) /// clar ma aflu prea sus
            dr = mid-1;
        else {
            /// testez mijlocul
            if (y-mid != (2*y-mid)/2 && query (x,(2*y-mid)/2) == 0) /// tot prea sus
                dr = mid-1;
            else {
                int mid2 = (2*y-mid)/2;
                if (y-mid != (y+mid2)/2 && (2*y-mid)/2 != (y+mid2)/2 && query(x,(y+mid2)/2) == 0)
                    dr = mid-1;
                else {
                    sol = mid;
                    st = mid+1;
                }}}}

    m = sol + 1;

    /// stanga sus
    while (x - m >= 1 && y + m <= n){
        if (query (x-m,y+m))
            x -= m, y += m;
        else break;
    }

    /// stanga
    while (x - 2*m >= 1){
        if (query (x-2*m,y))
            x -= 2*m;
        else break;
    }

    /// sus
    while (y + 2*m <= n){
        if (query (x,y+2*m))
            y += 2*m;
        else break;
    }

    cout<<"solution "<<x + 2*m + m/2<<" "<<y - 2*m - m/2;



    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 256 KB Output is correct
2 Correct 5 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 6 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 384 KB Output is correct
2 Correct 5 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 256 KB Output is correct
2 Correct 6 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 6 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 256 KB Output is correct
2 Correct 6 ms 384 KB Output is correct
3 Correct 7 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 384 KB Output is correct
2 Correct 5 ms 256 KB Output is correct
3 Correct 6 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 256 KB Output is correct
2 Correct 6 ms 256 KB Output is correct
3 Correct 7 ms 384 KB Output is correct