제출 #1346108

#제출 시각아이디문제언어결과실행 시간메모리
1346108settopFind the Box (EGOI23_findthebox)C++20
0 / 100
0 ms436 KiB
#include<bits/stdc++.h>

using namespace std;

#define int long long
#define fall(i,a,b) for(int i=a;i<=b;i++)
#define rfall(i,a,b) for(int i=a;i>=b;i--)
#define pb push_back
#define F first
#define all(x) x.begin(),x.end()
#define S second
#define sz(x) (int)x.size()
const int MAXN=3e5+10;

typedef pair<int,int> pii;

int n,m,x,y;

void ask(string s){
    cout<<"? "<<s<<endl;
    cin>>x>>y;
}

void solve(int col){
    string s="";
    fall(i,0,col-1) s+='>';
    fall(i,0,n) s+='v';
    ask(s);
    cout<<"! "<<x+1<<" "<<col<<endl;
}

int32_t main(){
    std::ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin>>n>>m;
    string s="";

    if(m==1){
        fall(i,1,n) s+='v';
        ask(s);
        cout<<"! "<<x+1<<" 0"<<endl;
        return 0;
    }
    if(n==1){
        fall(i,1,m) s+='>';
        ask(s);
        cout<<"! 0 "<<y+1<<endl;
        return 0;
    }
    
    int mei=(m-1)/2;
    s="";
    fall(i,0,mei) s+='>';
    fall(i,1,n){
        fall(j,mei+1,m-2) s+='>';
        fall(j,mei+1,m-2) s+='<';
        s+='v';
    }
    ask(s);
    if(x!=n-1){
        solve(mei+1);
        return 0;
    }
    if(y==0){
        s="";
        fall(i,1,m) s+='>';
        ask(s);
        cout<<"! 0 "<<y+1<<endl;
        return 0;
    }
    if(y!=mei+1){
        solve(m-(mei+1-y));
        return 0;
    }
    s="";
    fall(i,0,mei-1) s+='>';
    fall(i,1,n){ //estamos em mei
        rfall(j,mei,1) s+='<';
        fall(j,1,mei) s+='>';
        s+='v';
    }
    ask(s);
    if(x!=n-1){
        solve(mei);
        return 0;
    }
    if(y!=mei){
        solve(y-mei-1);
        return 0;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...