比赛 二进制状态表示之搜索中的应用 评测结果 AAAAAAAAAA
题目名称 跳棋的挑战 最终得分 100
用户昵称 宇战 运行时间 1.169 s
代码语言 C++ 内存使用 2.31 MiB
提交时间 2023-07-27 08:36:11
显示代码纯文本
    #include<bits/stdc++.h>
    using namespace std;
    int n,m,s,o,a[10000],b[1000];
    void dfs(int now,int RL,int LR,int st){
        if(st>n){
            s++;
            if(o<3){
               for(int i=1;i<st;i++){
                cout<<b[i]<<' ';
            } 
            cout<<endl;
            o++;
            }
            return;
        }
        int lim=(now|RL|LR)^((1<<n)-1);
        lim=lim&((1<<n)-1);
        for(int i=lim;i;i&=(i-1)){
            int t=i&(-i);
            b[st]=a[t];
            dfs(now|t,(RL|t)<<1,(LR|t)>>1,st+1);
            
        }
    } 
    int main(){
        freopen("checker.in","r",stdin);
        freopen("checker.out","w",stdout);
        cin>>n;
        for(int i=1;i<=n;i++){
            int x=pow(2,i-1);
            a[x]=i;
        }
        dfs(0,0,0,1);
        cout<<s;
          
          
          
        return 0;
    }