| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1260883 | jump | Aliens (IOI07_aliens) | C++20 | 0 ms | 0 KiB | 
#include <bits/stdc++.h>
#define int long long
int lim=10000000,x,y;
int u,d,l,r;
int USE = 0;
int CENTERx,CENTERy,SIMM;
bool examine(int X,int Y);
void getrxy(){
	bool found = false;
	int rx;
	int ry;
	while(!found){
		rx = CENTERx-SIMM*5+rand()%(SIMM*10);
		ry = CENTERy-SIMM*5+rand()%(SIMM*10);
		if(examine(rx,ry)){
			x=rx;
			y=ry;
			found = true;
		}
		std::cout << rx << ' ' << ry << '\n';
	}
}
bool examine(int X,int Y){
	int x0 = CENTERx - SIMM - SIMM - SIMM/2;
	int y0 = CENTERy - SIMM - SIMM - SIMM/2;
	int dx = X - x0;
	int dy = Y - y0;
	
	if (dx < 0 || dy < 0 || dx >= 5*SIMM || dy >= 5*SIMM)
		return 0;
	else
	{
		dx = dx / SIMM;
		dy = dy / SIMM;
		if ((dx+dy) % 2 == 0)
			return 1;
		else
			return 0;
	}
}
bool test(int tx,int ty){
	USE++;
	if(tx>lim||ty>lim||tx<=0||ty<=0)return false;
	//return examine(tx,ty);
	std::cout << "examine " << tx << ' ' << ty << std::endl;
	std::flush();
	std::string in;
	std::cin >> in;
	return in[0]=='t';
}
void ans(int tx,int ty){
	//return solution(tx,ty);
	std::cout << "solution " << tx << ' ' << ty << std::endl;
	std::flush();
}
bool up(int x,int y,int t){return test(x,y+t);}
bool down(int x,int y,int t){return test(x,y-t);}
bool left(int x,int y,int t){return test(x-t,y);}
bool right(int x,int y,int t){return test(x+t,y);}
int find(std::function<bool(int,int,int)> f){
	bool first = true;
	int l=1,h=-1;
	int last=l;
	while(h==-1){
		if(f(x,y,l)){
			first = false;
			last=l;
			l*=2;
		}
		else{
			if(first)return 0;
			h = l;
		}
	}
	l=last;h-=1;
	while(l<h){
		int mid = (l+h+1)/2;
		if(f(x,y,mid)){
			l = mid;
		}
		else{
			h = mid-1;
		}
	}
	return l;
}
void fans(int cmx,int cmy,int m){
	int tr=2;
	int xd=1;
	int yd=1;
	if(test(cmx+2*m,cmy))xd+=1;
	if(test(cmx+2*2*m,cmy))xd+=1;
	if(test(cmx,cmy+2*m))yd+=1;
	if(test(cmx,cmy+2*2*m))yd+=1;
	if((xd==1&&yd==2)||(xd==1&&yd==1)||(xd==2&&yd==1)){
		if(test(cmx+m,cmy+m)){
			int ax,ay;
			if(xd==1)ax = cmx-m;
			else ax = cmx+m;
			if(yd==1)ay = cmy-m;
			else ay = cmy + m;
			ans(ax,ay);
		}
		else{
			ans(cmx-(2-xd)*2*m,cmy-(2-yd)*2*m);
		}
	}
	else if(xd==2&&yd==2){
		if(test(cmx-2*m,cmy-2*m)){
			ans(cmx,cmy);
		}
		else{
			ans(cmx+m,cmy+m);
		}
	}
	else{
		ans(cmx-(2-xd)*2*m,cmy-(2-yd)*2*m);
	}
}
signed main() {
	//srand(time(nullptr));
	SIMM=3+rand();
	CENTERx=SIMM*3+rand();CENTERy=SIMM*3+rand();
    std::ios::sync_with_stdio(false);std::cin.tie(nullptr);
	//std::cin >> lim >> x >> y;
	getrxy();
	int u = find(up);
	int l = find(left);
	int r = find(right);
	int d = find(down);
	int m = (1+l+r);
	int cmx = x-l+m/2;
	int cmy = y-d+m/2;
	//std::cout << u << ' ' << l << ' ' << r << ' ' << d << ' ' << m << ' ' << cmx << ' ' << cmy;
	fans(cmx,cmy,m);
	return 0;
}
