#include<cstdio>
using namespace std;
int n;
int t,x0,y0,k/*它没用*/;
int ok1,ok2,ok3,ok4;
int main(){
scanf("%d",&n);
for(int a=1;a<=n;++a)
{
scanf("%d%d%d%d",&t,&x0,&y0,&k);
printf("0 %d %d\n",x0-t,y0+t);//探测左上
scanf("%d",&ok1);
printf("0 %d %d\n",x0+t,y0+t);//探测右上
scanf("%d",&ok2);
printf("0 %d %d\n",x0-t,y0-t);//探测左下
scanf("%d",&ok3);
printf("0 %d %d\n",x0+t,y0-t);//探测右下
scanf("%d",&ok4);
if(ok1==1&&ok2==1){//上
printf("1 %d %d\n",x0,y0+t);
continue;
}
if(ok2==1&&ok4==1){//右
printf("1 %d %d\n",x0+t,y0);
continue;
}
if(ok3==1&&ok4==1){//下
printf("1 %d %d\n",x0,y0-t);
continue;
}
if(ok1==1&&ok3==1){//左
printf("1 %d %d\n",x0-t,y0);
continue;
}
if(ok1==1){
for(int x1=x0-t,y1=y0,x2=x0,y2=y0+t,mx,my;;){
if((x1+x2)%2==0){
if(x1==x2){
printf("1 %d %d\n",x1,y1);
break;
}
mx=(x1+x2)/2;
my=(y1+y2)/2;
printf("0 %d %d\n",mx-t,my);
scanf("%d",&ok1);
if(ok1==1){
x2=mx;
y2=my;
}
else{
x1=mx+1;
y1=my+1;
}
}
else{
if(x2-x1>1){
mx=(x1+x2)/2;
my=(y1+y2)/2;
printf("0 %d %d\n",mx-t,my);
scanf("%d",&ok1);
if(ok1==1){
x2=mx;
y2=my;
}
else{
x1=mx+1;
y1=my+1;
}
}
else{
printf("0 %d %d\n",x1-t,y1);
scanf("%d",&ok1);
if(ok1==1){
printf("1 %d %d\n",x1,y1);
}
else{
printf("1 %d %d\n",x2,y2);
}
break;
}
}
}
continue;
}
if(ok4==1){
for(int x1=x0,y1=y0-t,x2=x0+t,y2=y0,mx,my;;){
if((x1+x2)%2==0){
if(x1==x2){
printf("1 %d %d\n",x1,y1);
break;
}
mx=(x1+x2)/2;
my=(y1+y2)/2;
printf("0 %d %d\n",mx-t,my);
scanf("%d",&ok1);
if(ok1==1){
x2=mx;
y2=my;
}
else{
x1=mx+1;
y1=my+1;
}
}
else{
if(x2-x1>1){
mx=(x1+x2)/2;
my=(y1+y2)/2;
printf("0 %d %d\n",mx-t,my);
scanf("%d",&ok1);
if(ok1==1){
x2=mx;
y2=my;
}
else{
x1=mx+1;
y1=my+1;
}
}
else{
printf("0 %d %d\n",x1-t,y1);
scanf("%d",&ok1);
if(ok1==1){
printf("1 %d %d\n",x1,y1);
}
else{
printf("1 %d %d\n",x2,y2);
}
break;
}
}
}
continue;
}
if(ok2==1){
for(int x1=x0,y1=y0,x2=x0+t,y2=y0+t,mx,my;;){
if((x1+x2)%2==0){
if(x1==x2){
printf("1 %d %d\n",x1,y1);
break;
}
mx=(x1+x2)/2;
my=(y1+y2)/2;
printf("0 %d %d\n",mx+t,my);
scanf("%d",&ok1);
if(ok1==1){
x1=mx;
y1=my;
}
else{
x2=mx-1;
y2=my-1;
}
}
else{
if(x2-x1>1){
mx=(x1+x2)/2;
my=(y1+y2)/2;
printf("0 %d %d\n",mx+t,my);
scanf("%d",&ok1);
if(ok1==1){
x1=mx;
y1=my;
}
else{
x2=mx+1;
y2=my+1;
}
}
else{
printf("0 %d %d\n",x2+t,y2);
scanf("%d",&ok1);
if(ok1==1){
printf("1 %d %d\n",x2,y2);
}
else{
printf("1 %d %d\n",x1,y1);
}
break;
}
}
}
continue;
}
if(ok4==1){
for(int x1=x0-t,y1=y0-t,x2=x0,y2=y0,mx,my;;){
if((x1+x2)%2==0){
if(x1==x2){
printf("1 %d %d\n",x1,y1);
break;
}
mx=(x1+x2)/2;
my=(y1+y2)/2;
printf("0 %d %d\n",mx+t,my);
scanf("%d",&ok1);
if(ok1==1){
x1=mx;
y1=my;
}
else{
x2=mx-1;
y2=my-1;
}
}
else{
if(x2-x1>1){
mx=(x1+x2)/2;
my=(y1+y2)/2;
printf("0 %d %d\n",mx+t,my);
scanf("%d",&ok1);
if(ok1==1){
x1=mx;
y1=my;
}
else{
x2=mx+1;
y2=my+1;
}
}
else{
printf("0 %d %d\n",x2+t,y2);
scanf("%d",&ok1);
if(ok1==1){
printf("1 %d %d\n",x2,y2);
}
else{
printf("1 %d %d\n",x1,y1);
}
break;
}
}
}
continue;
}
}
return 0;
}
我提交了,却是TLE,并且每个测试点只有几毫秒
第一个测试点的详情: Time Limit Exceeded. The checker ran into an unexpected error: ExecutionResult(cpu_time=2, real_time=4000, memory=602112, exit_code=0, signal=0, exceed=<LimitExcess.REAL_TIME: 2>) 不知道为什么,求助