Submission #1368116

#TimeUsernameProblemLanguageResultExecution timeMemory
1368116SofiatpcFind the Box (EGOI23_findthebox)C++20
0 / 100
0 ms420 KiB
#include <bits/stdc++.h>

using namespace std;

int h,w; 

void askline(int r){
    cout<<"? ";
    for(int i = 1; i < r; i++)cout<<"v";
    for(int j = 1; j < w; j++)cout<<">";
    cout<<endl;

    int i,j; cin>>i>>j; i++; j++;
    if(i != r)cout<<"! "<<r-1<<" 0"<<endl;
    else cout<<"! "<<i-1<<" "<<j+1 -1<<endl;
}

void askcolumn(int c){
    cout<<"? ";
    for(int j = 1; j < c; j++)cout<<">";
    for(int i = 1; i < h; i++)cout<<"v";
    cout<<endl;

    int i,j; cin>>i>>j; i++; j++;
    cout<<"! "<<i+1 -1<<" "<<j -1<<endl;
}

void solve1(){
    int mid = (h+1)/2;

    cout<<"? ";
    for(int i = 1; i < mid+1; i++)cout<<"v";
    for(int j = 1; j <= w; j++){
        for(int i = mid+1; i < h; i++)cout<<"v";
        for(int i = h; i > mid+1; i--)cout<<"^";
        if(j != w)cout<<">";
    }cout<<endl;

    int r,c; cin>>r>>c; r++; c++;
    if(c != w){ cout<<"! "<<mid+1 -1<<" "<<c+1 -1<<endl; return; }
    if(r != mid+1){ 
        if(h-(mid-r) >= mid+1) askline(h-(mid-r)); 
        else askcolumn(1);
        return; 
    }
    
    cout<<"? ";
    for(int j = 1; j <= w; j++){
        if(j != 1) for(int i = mid; i > 1; i--)cout<<"^";
        for(int i = 1; i < mid; i++)cout<<"v";
        if(j != w)cout<<">";
    }
    for(int i = mid; i >= 1; i--)cout<<"^";
    for(int j = w; j > 1; j--)cout<<"<";
    cout<<endl;

    cin>>r>>c; r++; c++;
    if(c-2 < 0 && r-2 < 0)cout<<"! "<<mid -1<<" 1"<<endl;
    else if(c-2 < 0)cout<<"! "<<r-1 -1<<" "<<w -1<<endl;
    else cout<<"! "<<r -1<<" "<<c-1 -1<<endl;
}

void solve2(){
    int mid = h/2;

    cout<<"?";
    for(int i = 1; i < mid+1; i++)cout<<"v";
    for(int j = 1; j <= w; j++){
        for(int i = mid+1; i < h; i++)cout<<"v";
        for(int i = h; i > mid+1; i--)cout<<"^";
        if(j != w)cout<<">";
    }cout<<endl;

    int r,c; cin>>r>>c; r++; c++; 
    if(r == mid+1 && c != w){ cout<<"! "<<mid+1 -1<<" "<<c+1 -1<<endl; return; }
    if(r == 1){ askcolumn(1); return; }
    if(r != mid+1) { askline(h-(mid-r)); return; }
    
    cout<<"?";
    for(int i = 1; i < mid+1; i++)cout<<"v";
    cout<<">";
    for(int j = 2; j <= w; j++){
        for(int i = mid; i > 1; i--)cout<<"^";
        if(j != w) for(int i = 1; i < mid; i++)cout<<"v";
        if(j != w)cout<<">";
    }
    cout<<"^";
    for(int j = w; j > 1; j--)cout<<"<";
    cout<<endl;

    cin>>r>>c; r++; c++;
    if(c == 1)cout<<"! "<<r-1 -1<<" "<<w -1<<endl;
    else cout<<"! "<<r -1<<" "<<c-1 -1<<endl;
}

int main(){
    cin>>h>>w;

    if(h == 1) askline(1); 
    else if(w == 1) askcolumn(1); 
    else if(h%2 == 1)solve1();
    else solve2();
    
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...