求条玄关
查看原帖
求条玄关
1411905
zhangyuchen201304楼主2025/7/28 15:12
#include<bits/stdc++.h>
using namespace std;

bool flag=0;
vector<int>ans;

void print(int l1,int r1,int l2,int r2){
    cout<<"1 ";
    cout<<r1-l1+1<<' ';
    for(int i=l1;i<=r1;i++)cout<<i<<' ';
    cout<<r2-l2+1<<' ';
    for(int i=l2;i<=r2;i++)cout<<i<<' ';
    cout<<endl;
}

void f(int l,int r,int k){
    if(flag)return ;
    if(k==2){
        if((r-l+1)%2==0){
            if(r-l+1==2){
                cout<<2<<' '<<l<<' '<<r<<endl;
                flag=1;
                return ;
            }
            int mid=(l+r)>>1;
            print(l,mid,mid+1,r);
            char c;
            cin>>c;
            if(c=='='){
                f(l,mid,1);
                f(mid+1,r,1);
            }else if(c=='<'){
                f(l,mid,2);
            }else{
                f(mid+1,r,2);
            }
        }else{
            if(l==r){
                ans.push_back(l);
                if(ans.size()==2){
                    cout<<2<<' '<<ans[0]<<' '<<ans[1]<<endl;
                    flag=1;
                }
                return ;
            }
            int mid=(l+r)>>1;
            print(1,mid-1,mid+1,r);
            char c;
            cin>>c;
            if(c=='='){
                f(l,mid-1,1);
                f(mid+1,r,1);
            }else if(c=='<'){
                f(l,mid,2);
            }else {
                f(mid,r,2);
            }
        }
    }else{
        if(r-l+1==2){
            print(l,l,r,r);
            char c;
            cin>>c;
            if(c=='<'){
                ans.push_back(l);
            }else ans.push_back(r);
            if(ans.size()==2){
                cout<<2<<' '<<ans[0]<<' '<<ans[1]<<endl;
                flag=1;
            }
            return ;
        }
        if(l==r){
            ans.push_back(l);
            if(ans.size()==2){
                flag=1;
                cout<<2<<' '<<ans[0]<<' '<<ans[1]<<endl;
            }
            return ;
        }
        int len=(r-l)/3;
        int mid1=l+len,mid2=r-len;
        print(l,mid1,mid2,r);
        char c;
        cin>>c;
        if(c=='=')f(mid1+1,mid2-1,1);
        else if(c=='<')f(l,mid1,1);
        else f(mid2,r,1);
    }
}

int main(){
    int n;
    cin>>n;
    f(1,n,2);
    return 0;
}
2025/7/28 15:12
加载中...