#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,询问过多 不知道卡哪死循环了呜呜