답안 #90198

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
90198 2018-12-20T19:25:16 Z asifthegreat Aliens (IOI07_aliens) C++14
0 / 100
2 ms 588 KB
#include <bits/stdc++.h>
using namespace std;

int n,m;


bool check(int xx, int yy) {
 
	if (0 >= xx || xx > n) return false;
	if (yy <= 0 || yy > n) return false;
 
	//numq++;
	//if (numq > 300) {
		// cout << "solution " << 1 << " " << 1 << endl;
		// assert(false);
//	}
 
	cout << "examine " << xx << " " << yy << endl;
	cout.flush();
	string ans;
	cin >> ans;
	return ans == "true";
}


int main()
{
	//int n,m;
	cin >> n >> m;
	int x,y;
	cin >> x >>  y;
	int lo = y,hi = y+m;
	int dan = -1,bam=-1,upore=-1,niche=-1;
	while(hi > lo){
		int mid=(lo+hi)/2;
		if(check(x,mid)){
			dan = max(dan,mid);
			lo = mid+1;
		}
		else hi = mid-1;
	}
	/*for(int mid = lo;mid <= hi;mid++){
		if(check(x,mid)){
			dan = max(dan,mid);
		}
	}*/
	if(dan+m*4 <= n and check(x,dan+m*4)){
		dan = dan+m*4;
	}
	else if(dan + m* 2 <= n and check(x,dan+m*2))dan = dan+m*2;
	lo = max(1,y-m);
	hi = y;
	bam = y;
	while(hi>lo){
		int mid=(lo+hi)/2;
		if(check(x,mid)){
			bam = min(bam,mid);
			hi = mid-1;
		}
		else lo = mid+1;
	}
	/*for(int mid = lo;mid <= hi;mid++){
		if(check(x,mid)){
			bam = min(bam,mid);
		}
	}*/
	if(bam-m*4 > 0 and check(x,bam-m*4)){
		bam -= m*4;
	}
	else if(bam-m*2 > 0 and check(x,bam-m*2)){
		bam -= m*2;
	}
	hi = x;
	lo = max(1,x-m);
	upore = x;
	while(hi>lo){
		int mid=(lo+hi)/2;
		if(check(mid,y)){
			upore = min(upore,mid);
			hi = mid-1;
		}
		else lo = mid+1;
	}
	/*for(int mid = lo;mid <= hi;mid++){
		if(check(mid,y)){
			upore = min(upore,mid);
		}
	}*/
	if(upore-m*4 > 0 and check(upore-m*4,y)){
		upore -= m*4;
	}
	else if(upore-m*2 > 0 and check(upore-m*2,y)){
		upore -= m*2;
	}
	niche = x;
	lo = x;
	hi = x+m;
	while(hi>lo){
		int mid=(lo+hi)/2;
		if(check(mid,y)){
			niche = max(niche,mid);
			lo = mid+1;
		}
		else hi = mid-1;
	}
	/*for(int mid = lo;mid <= hi;mid++){
		if(check(mid,y)){
			niche = max(niche,mid);
		}
	}*/
	if(niche+m*4 <= n and check(niche+m*4,y)){
		niche = niche+m*4;
	}
	else if(niche + m* 2 <= n and check(niche+m*2,y))niche = niche+m*2;
	x = (niche-upore)/2 + m;
	y = (dan-bam)/2 + m;
	cout << "solution " << x << " " << y << endl;
	cout.flush();
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2 ms 248 KB Time limit exceeded (wall clock)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2 ms 452 KB Time limit exceeded (wall clock)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2 ms 452 KB Time limit exceeded (wall clock)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2 ms 452 KB Time limit exceeded (wall clock)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2 ms 452 KB Time limit exceeded (wall clock)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2 ms 452 KB Time limit exceeded (wall clock)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2 ms 588 KB Time limit exceeded (wall clock)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2 ms 588 KB Time limit exceeded (wall clock)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2 ms 588 KB Time limit exceeded (wall clock)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 0 ms 588 KB Time limit exceeded (wall clock)
2 Halted 0 ms 0 KB -