求大佬们给组hack数据
查看原帖
求大佬们给组hack数据
89644
Harry_hcx楼主2021/5/12 13:23
#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
using namespace std;
int n,ans1,ans2;
int check(int l,int r){
	while(l<r){
		int mid=(l+r)>>1;
		int num=r-l+1;
		if (num%2==1){
			int ln=mid-1-l+1;
			int rn=r-(mid+1)+1;
			cout<<"1 "<<ln<<' ';
			for (int i=l;i<=mid-1;i++)
				cout<<i<<' ';
			cout<<rn<<' ';
			for (int i=mid+1;i<=r;i++)
				cout<<i<<' ';
			cout<<endl;
			char result;
			cin>>result;
			if (result=='<')
				r=mid;
			else if (result=='>')
				l=mid;
		}
		else{
			int ln=mid-l+1;
			int rn=r-(mid+1)+1;
			cout<<"1 "<<ln<<' ';
			for (int i=l;i<=mid;i++)
				cout<<i<<' ';
			cout<<rn<<' ';
			for (int i=mid+1;i<=r;i++)
				cout<<i<<' ';
			cout<<endl;
			char result;
			cin>>result;
			if (result=='<')
				r=mid;
			else if (result=='>')
				l=mid+1;
		}
	}
	return l;
}
int main(){
	cin>>n;
	int l=1,r=n;
	while (l<r-1){
		int mid=(l+r)>>1;
		int num=r-l+1;
		if (num%2==1){
			int ln=mid-1-l+1;
			int rn=r-(mid+1)+1;
			cout<<"1 "<<ln<<' ';
			for (int i=l;i<=mid-1;i++)
				cout<<i<<' ';
			cout<<rn<<' ';
			for (int i=mid+1;i<=r;i++)
				cout<<i<<' ';
			cout<<endl;
			char result;
			cin>>result;
			if (result=='<')
				r=mid;
			else if (result=='>')
				l=mid;
			else{
				ans1=check(l,mid-1);
				ans2=check(mid+1,r);
				cout<<"2 "<<ans1<<' '<<ans2<<endl;
				return 0;
			}
		}
		else{
			int ln=mid-l+1;
			int rn=r-(mid+1)+1;
			cout<<"1 "<<ln<<' ';
			for (int i=l;i<=mid;i++)
				cout<<i<<' ';
			cout<<rn<<' ';
			for (int i=mid+1;i<=r;i++)
				cout<<i<<' ';
			cout<<endl;
			char result;
			cin>>result;
			if (result=='<')
				r=mid;
			else if (result=='>')
				l=mid+1;
			else{
				ans1=check(l,mid);
				ans2=check(mid+1,r);
				cout<<"2 "<<ans1<<' '<<ans2<<endl;
				return 0;
			}
		}
	}
	cout<<"2 "<<l<<' '<<r<<endl;
	return 0;
}

主要的思路是先把两个球分离开,确定分别在哪个区间然后再找

2和11TLE,询问过多 不知道卡哪死循环了呜呜

2021/5/12 13:23
加载中...