请问一下,为什么会一片TLE?
查看原帖
请问一下,为什么会一片TLE?
387840
happy_dengziyue楼主2021/2/18 21:21

记录在此

#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>) 不知道为什么,求助

2021/2/18 21:21
加载中...