답안 #112761

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
112761 2019-05-21T19:29:07 Z IVIosab Aliens (IOI07_aliens) C++17
80 / 100
3 ms 384 KB
#include <bits/stdc++.h>

using namespace std;
int n,nx,ny;
int findright(){
    int x=nx,y=ny;
    int cnt=1;
    int l=0,r=0;
    while(true){
        string in;
        if(x+cnt<=n) {
            cout << "examine " << x + cnt << " " << y << endl;
            cin >> in;
        }
        else{
            r=n;
            l=x+(cnt/2);
            break;
        }
        if(in!="true"){
            l=x+(cnt/2);
            r=x+cnt;
            break;
        }
        else {
            cnt *= 2;
        }
    }
    while (l < r) {
        int mid = l + (r - l + 1) / 2;
        cout<<"examine "<<mid<<" "<<y<<endl;
        string st;
        cin>>st;
        if (st=="true") l = mid;
        else r = mid - 1;
    }
    return l;
}
int findleft(){
    int x=nx,y=ny;
    int cnt=1;
    int l=0,r=0;
    while(true){
        string in;
        if(x-cnt>=1) {
            cout << "examine " << x - cnt << " " << y << endl;
            cin >> in;
        }
        else{
            l=1;
            r=x-(cnt/2);
            break;
        }
        if(in!="true"){
            l=x-cnt;
            r=x-(cnt/2);
            break;
        }
        else {
            cnt *= 2;
        }
    }
    while (l < r) {
        int mid = (l + (r - l) / 2);
        cout<<"examine "<<mid<<" "<<y<<endl;
        string st;
        cin>>st;
        if (st=="true") r = mid;
        else l = mid + 1;
    }
    return l;
}
int findbottom(){
    int x=nx,y=ny;
    int cnt=1;
    int l=0,r=0;
    while(true){
        string in;
        if(y-cnt>=1) {
            cout << "examine " << x << " " << y - cnt << endl;
            cin >> in;
        }
        else{
            l=1;
            r=y-(cnt/2);
            break;
        }
        if(in!="true"){
            l=y-cnt;
            r=y-(cnt/2);
            break;
        }
        else {
            cnt *= 2;
        }
    }
    while (l < r) {
        int mid = (l + (r - l) / 2);
        cout<<"examine "<<x<<" "<<mid<<endl;
        string st;
        cin>>st;
        if (st=="true") r = mid;
        else l = mid + 1;
    }
    return l;
}
int main() {
    //freopen("sample-8.in", "r", stdin);
    //freopen("output8.txt", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>nx>>ny;
    int r=findright(),l=findleft(),b=findbottom();
    int m=r-l+1;
    int resx=l+(m/2),resy=b+(m/2);
    string sr;
    m*=2;
    bool _1=false,_2=false,_3=false,_4=false;
    if(resx-m>=1) {
        cout << "examine " << resx - m << " " << resy << endl;
        cin >> sr;
        if (sr == "false") {
            resx += m;
            _1=true;
        }
    }
    else{
        resx += m;
        _1=true;
    }
    if(resx+m<=n) {
        cout << "examine " << resx + m << " " << resy << endl;
        cin >> sr;
        if (sr == "false") {
            resx -= m;
            _2=true;
        }
    }
    else{
        resx-=m;
        _2=true;
    }
    if(resy-m>=1) {
        cout << "examine " << resx << " " << resy - m << endl;
        cin >> sr;
        if (sr == "false") {
            resy += m;
            _3=true;
        }
    }
    else{
        resy+=m;
        _3=true;
    }
    if(resy+m<=n) {
        cout << "examine " << resx << " " << resy + m << endl;
        cin >> sr;
        if (sr == "false") {
            resy -= m;
            _4=true;
        }
    }
    else{
        resy-=m;
        _4=true;
    }
    if((_1&&_2)||(_3&&_4)){
        m/=2;
        resx+=m;
        resy+=m;
    }
    cout<<"solution "<<resx<<" "<<resy<<endl;
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 384 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Incorrect 2 ms 256 KB Incorrect
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 332 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 256 KB Output is correct
2 Correct 3 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 3 ms 256 KB Output is correct
3 Correct 3 ms 384 KB Output is correct