이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
using namespace std;
// const int M=212; // Trying for 100 points
const int M=100; // Trying for 40/60 points
int n,m;
string ans;
pair<int,int> just_do_it(int x0,int y0,bool swp=0) // One call take atmost M queries
{
int to_right=-1;
for(int j=1;j<=M;j++)
{
if((x0+j)>n)
{
to_right=j-1;
break;
}
if(swp)
{
cout<<"examine "<<y0<<' '<<x0+j<<endl;
}
else
{
cout<<"examine "<<x0+j<<' '<<y0<<endl;
}
cin>>ans;
if(ans=="false")
{
to_right=j-1;
break;
}
}
if(to_right==-1)
to_right=M;
if(swp)
return {to_right,m-to_right-1};
int to_left=-1;
for(int j=1;j<=M;j++)
{
if((x0-j)<1)
{
to_left=j-1;
break;
}
cout<<"examine "<<x0-j<<' '<<y0<<endl;
cin>>ans;
if(ans=="false")
{
to_left=j-1;
break;
}
}
if(to_left==-1)
to_left=M;
return {to_right,to_left};
}
int main()
{
int x0,y0;
cin>>n>>x0>>y0;
auto ap=just_do_it(x0,y0);
int to_right=ap.first;
int to_left=ap.second;
m=to_left+to_right+1;
// cout<<m<<endl;
ap=just_do_it(y0,x0,1);
int to_up=ap.first;
int to_down=ap.second;
// cout<<to_left<<' '<<to_right<<endl;
// cout<<to_up<<' '<<to_down<<endl;
int right_most = x0+to_right;
int left_most = x0-to_left;
int up_most = y0+to_up;
int down_most = y0-to_down;
int center_x = (right_most+left_most)/2;
int center_y = (up_most+down_most)/2;
// cout<<center_y<<' '<<center_x<<endl;
int final_x,final_y;
{
// find how many blocks above
int block_up=0;
for(int i=1;i<=(M/2);i++)
{
// Want to go one block up
// X remain same
if((center_y + 2ll*i*m)>n)
{
block_up=i-1;
break;
}
cout<<"examine "<<center_x<<' '<<(center_y + 2ll*i*m)<<endl;
cin>>ans;
if(ans=="false")
{
block_up=i-1;
break;
}
}
int block_down=m-block_up-1;
final_y = ((center_y - 2ll*block_down*m) + (center_y + 2ll*block_up*m))/2;
}
{
// find how many blocks above
int block_right=0;
for(int i=1;i<=(M/2);i++)
{
// Want to go one block up
// X remain same
if((center_x + 2ll*i*m)>n)
{
block_right=i-1;
break;
}
cout<<"examine "<<(center_x + 2ll*i*m)<<' '<<center_y<<endl;
cin>>ans;
if(ans=="false")
{
block_right=i-1;
break;
}
}
int block_left=m-block_right-1;
final_x = ((center_x - 2ll*block_left*m) + (center_x + 2ll*block_right*m))/2;
}
cout<<"solution "<<final_x<<' '<<final_y<<endl;
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... |