Rt,WA on #20, Hack1,Hack3
求大佬提供一组 Hack 数据 orz
可能肯定又能优化的地方
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
//#define LL_inf 1145141919810
#define ull unsigned long long
#define ll long long
using namespace std;
//#define int long long
int n;
vector<int> ans;
int dfs(vector<int> vc,int num)
{
if(vc.size()==0) return 0;
// cout<<"vc:";
// for(auto i:vc)
// {
// cout<<i<<" ";
// }
// cout<<","<<num<<endl;
vector<int> a1,a2;
int len=vc.size()/2;
if(len==0) return 0;
for(int i=0;i<len;i++)
{
a1.push_back(vc[i]);
}
for(int i=len;i<len+len;i++)
{
a2.push_back(vc[i]);
}
printf("1 %d ",a1.size());
for(int i=0;i<a1.size();i++)
{
printf("%d ",a1[i]);
}
printf("%d",a2.size());
for(int i=0;i<a2.size();i++)
{
printf(" %d",a2[i]);
}
putchar('\n');
fflush(stdout);
char opt;
cin>>opt;
if(opt=='>')
{
if(vc.size()==2)
{
ans.push_back(vc[1]);
return 1;
}
if((vc.size())%2==1)
{
a2.push_back(vc[vc.size()-1]);
}
int a=dfs(a2,num-1);
if(a==0)
{
a=dfs(a2,num);
}
return a;
}else if(opt=='<'){
if(vc.size()==2)
{
ans.push_back(vc[0]);
return 1;
}
if((vc.size())%2==1)
{
a1.push_back(vc[vc.size()-1]);
}
int a=dfs(a1,num-1);
if(a==0)
{
dfs(a1,num);
}
return a;
}else{
if(vc.size()==2 && num<2)
{
return 0;
}
if(vc.size()==2 && num==2)
{
ans.push_back(vc[0]);
ans.push_back(vc[1]);
return 2;
}
int a=dfs(a1,num-1);
int b=dfs(a2,num-1);
if(a==0 && b==0)
{
if(num!=0)
{
ans.push_back(vc[vc.size()-1]);
}
}
}
}
int main()
{
scanf("%d",&n);
vector<int> vc;
for(int i=1;i<=n;i++) vc.push_back(i);
dfs(vc,2);
cout<<2<<" ";
for(int i=0;i<ans.size();i++)
{
printf("%d ",ans[i]);
}
fflush(stdout);
return 0;
}