2019 CSP-S 复赛

山东的分数线还不到200,看来挺难的,有空就补题。

 

1、格雷码

按照题意模拟即可。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;

typedef unsigned long long ull;
ull n,k;

void dfs(ull m,ull k,bool flag){
    if(!m) return;
    if(flag){
        if(k < (ull)1 << (m - 1)){
            cout << 0;
            dfs(m - 1,k,1);
        }
        else{
            cout << 1;
            dfs(m - 1,k - ((ull)1 << (m - 1)),0);
        }
    }
    else if(!flag){
        if(k < (ull)1 << (m - 1)){
            cout << 1;
            dfs(m - 1,k,1);
        }
        else{
            cout << 0;
            dfs(m - 1,k - ((ull)1 << (m - 1)),0);
        }
    }
    return;
}
void solve(){
    cin >> n >> k;
    dfs(n,k,1);
    return;
}

int main(){
    solve();
    return 0;
} 
View Code
posted @ 2019-12-28 18:55  cgold  阅读(337)  评论(0)    收藏  举报