This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |