TLE#20,WA#22~24求助
查看原帖
TLE#20,WA#22~24求助
195331
Mine_KingCattleya楼主2022/1/24 13:31

RT,WA是询问次数太多,TLE是真的TLE,求大佬帮忙调一调/kel

//Think twice,code once.
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,ans1,ans2;
void solve(int l,int r,int b)
{
	// printf("debug:%d %d %d\n",l,r,b);
	if(l==r)
	{
		if(ans1==0) ans1=l;
		else ans2=l;
		return ;
	}
	if(l+1==r)
	{
		if(b==2) ans1=l,ans2=r;
		else
		{
			printf("1 1 %d 1 %d\n",l,r);
			fflush(stdout);
			char ch;
			cin>>ch;
			if(ch=='<')
			{
				if(ans1==0) ans1=l;
				else ans2=l;
			}
			else
			{
				if(ans1==0) ans1=r;
				else ans2=r;
			}
		}
		return ;
	}
	if(b==1)
	{
		int num=(r-l+1)/3;
		if((r-l+1)%3==2) num++;
		printf("1 ");
		printf("%d ",num);
		for(int i=l;i<=l+num-1;i++) printf("%d ",i);
		printf("%d ",num);
		for(int i=l+num;i<=l+2*num-1;i++) printf("%d ",i);
		puts("");
		fflush(stdout);
		char ch;
		cin>>ch;
		if(ch=='<') solve(l,l+num-1,1);
		else if(ch=='>') solve(l+num,l+2*num-1,1);
		else solve(l+2*num,r,1);
	}
	else
	{
		int num=(r-l+1)/2;
		printf("1 ");
		printf("%d ",num);
		for(int i=l;i<=l+num-1;i++) printf("%d ",i);
		printf("%d ",num);
		for(int i=l+num;i<=l+2*num-1;i++) printf("%d ",i);
		puts("");
		fflush(stdout);
		char ch;
		cin>>ch;
		if(ch=='=') solve(l,l+num-1,1),solve(l+num,l+2*num-1,1);
		else
		{
			if(ch=='<')
			{
				printf("1 1 %d 1 %d\n",l+num,r);
				fflush(stdout);
				cin>>ch;
				if(ch=='=') solve(l,l+num-1,2);
				else solve(l,l+num-1,1),solve(l+2*num,r,1);
			}
			else
			{
				printf("1 1 %d 1 %d\n",l,r);
				fflush(stdout);
				cin>>ch;
				if(ch=='=') solve(l+num,l+2*num-1,2);
				else solve(l+num,l+2*num-1,1),solve(l+2*num,r,1);
			}
		}
	}
	return ;
}
int main()
{
	scanf("%d",&n);
	solve(1,n,2);
	printf("2 %d %d\n",ans1,ans2);
	fflush(stdout);
	return 0;
}
//123 406
2022/1/24 13:31
加载中...