Submission #784084

# Submission time Handle Problem Language Result Execution time Memory
784084 2023-07-15T16:02:43 Z canadavid1 Aliens (IOI07_aliens) C++14
0 / 100
2 ms 208 KB
#include <bits/stdc++.h>
using namespace std;
#define all(x) begin(x),end(x)
//#define GRADING
#define binary_search(op) while(r-l>1) {int m=(r+l)/2; if (op) r = m; else l = m;}
int N,X0,Y0;

#ifdef GRADING
vector<vector<bool>> grid;
int counter=0,Xc,Yc;
void grading_init()
{
    int M;
    cin >> N >> M >> X0 >> Y0 >> Xc >> Yc;
    grid.assign(N+1,vector<bool>(N+1,false));
    assert(M%2==1);
    assert(M>=3);
    assert(Xc-2*M-M/2 >= 1);
    assert(Yc-2*M-M/2 >= 1);
    assert(Xc+2*M+M/2 <= N);
    assert(Yc+2*M+M/2 <= N);
    for(int i = -2; i <= 2; i++)
        for(int j = -2; j <= 2; j++)
            if((i+j)%2==0) 
                for(int y=-M/2; y<=M/2; y++)
                    for(int x=-M/2; x<=M/2;x++)
                        grid[i*M+y+Yc][j*M+x+Xc] = true;
    assert(grid[Y0][X0]);
        
}
void grading_end(int X,int Y)
{
    assert(X==Xc);
    assert(Y==Yc);
    cout << counter << " ok\n";
}
#endif

bool query(int x, int y)
{
    if(x <= 0 || x > N || y <= 0 || y > N) return 0;
    #ifdef GRADING
    counter++;
    return grid[y][x];
    #else
    cout << "examine " << x << " " << y << "\n" << flush;
    string out;
    cin >> out;
    return out=="true";
    #endif
}


int main()
{
    #ifdef GRADING
        grading_init();
    #else
        cin >> N >> X0 >> Y0;
    #endif
    int i = 1;
    while(query(X0-i,Y0)) i*=2;
    int l=X0-i,r=X0;
    binary_search(query(m,Y0));
    int left_border = r;

    i = 1;
    while(query(X0+i,Y0)) i*=2;
    l=X0,r=X0+i;
    binary_search(!query(m,Y0));
    int right_border = l;

    i = 1;
    while(query(X0,Y0+i)) i*=2;
    l=Y0,r=Y0+i;
    binary_search(!query(m,Y0));
    int bottom_border = l;
    
    int M = right_border - left_border + 1; // inclusive bounds
    int top_border = bottom_border - M + 1;

    Y0 = top_border + M/2;
    X0 = left_border + M/2;
    while(query(X0-M,Y0)) X0 = X0-M;
    while(query(X0,Y0-M)) Y0 = Y0-M;
    if(query(X0-M,Y0-M)) {X0-=M;Y0-=M;}
    X0+=2*M;
    Y0+=2*M;
    #ifdef GRADING
    grading_end(X0,Y0);
    #else
    cout << "solution " << X0+2*M << " " << Y0 + 2*M << "\n";
    #endif
}
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 208 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 208 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Incorrect
2 Halted 0 ms 0 KB -