Submission #1162065

#TimeUsernameProblemLanguageResultExecution timeMemory
1162065cnn008Aliens (IOI07_aliens)C++20
0 / 100
1 ms432 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,X0,Y0,_x,_y,cnt;
signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>X0>>Y0;
	auto ask = [&](int x, int y)->bool{
	    cnt++;
	    assert(cnt<=300);
		cout<<"examine "<<x<<" "<<y<<endl;
		string s;
		cin>>s;
		if(s[0]=='t') return 1;
		return 0;
	};
	int l1,r1,l2,r2;
	_x=X0,_y=Y0;
	for(int i=1; ; i*=2){
		int y=min(n,_y+i);
		if(!ask(X0,y)){
			int l=_y,r=y-1;
			while(l<=r){
				int mid=(l+r)>>1;
				if(ask(X0,mid)){
					r2=mid;
					l=mid+1;
				}else r=mid-1;
			}
			break;
		}else{
			if(y==n){
				r2=n;
				break;
			}
			_y+=i;
		}
	}
	_x=X0,_y=Y0;
	for(int i=1; ; i*=2){
		int x=min(n,_x+i);
		if(!ask(x,Y0)){
			int l=_x,r=x-1;
			while(l<=r){
				int mid=(l+r)>>1;
				if(ask(mid,Y0)){
					l2=mid;
					l=mid+1;
				}else r=mid-1;
			}
			break;
		}else{
			if(x==n){
				l2=n;
				break;
			}
			_x+=i;
		}
	}
	_x=X0,_y=Y0;
	for(int i=1; ; i*=2){
		int y=min(n,_y-i);
		if(!ask(X0,y)){
			int r=_y,l=y+1;
			while(l<=r){
				int mid=(l+r)>>1;
				if(ask(X0,mid)){
					r1=mid;
					r=mid-1;
				}else l=mid+1;
			}
			break;
		}else{
			if(y==1){
				r1=1;
				break;
			}
			_y-=i;
		}
	}
	_x=X0,_y=Y0;
	for(int i=1; ; i*=2){
		int x=min(n,_x-i);
		if(!ask(x,Y0)){
			int r=_x,l=x+1;
			while(l<=r){
				int mid=(l+r)>>1;
				if(ask(mid,Y0)){
					l1=mid;
					r=mid-1;
				}else l=mid+1;
			}
			break;
		}else{
			if(x==1){
				l1=1;
				break;
			}
			_x-=i;
		}
	}
	int m=r2-r1+1,cur=0;
	int l=1,r=300000;
	auto check = [&](int x, int y)->bool{
		if(x<0 || y<0) return 0;
		return ask(x,y);
	};
	while(check(l1-m,r1)) l1-=m;
	while(check(l1,r1-m)) r1-=m;
	l1+=(m-1)*m;
	r1+=(m-1)*m;
	l1+=m/2;
	r1+=m/2;
	cout<<"solution "<<l1<<" "<<r1<<endl;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...