@[zhanghengrui](/user/110634)
```cpp
#include <bits/stdc++.h>
using namespace std;
#define ll unsigned long long
ll pow(ll x){
return (1 << x);
/*这里改成快速幂或者龟速幂就可以过,但是直接位移就凉*/
}
ll a[10000], cnt = 0;
void dfs(ll n, ll k){
if(n == 1){
if(k == 1) a[++cnt] = 1;
else a[++cnt] = 0;
return ;
}
if(k >= (pow(n) / 2) )
dfs(n - 1, (pow(n) - k - 1));
else dfs(n - 1, k);
if(k >= pow(n) / 2) a[++cnt] = 1;
else a[++cnt] = 0;
return ;
}
int main(){
// freopen("hh.txt", "r", stdin);
ll n, k;
cin >> n >> k;
dfs(n, k);
for(int i = cnt;i > 0; i--) printf("%d", a[i]);
return orz;
}
```
如代码中注释处
by 青鸟_Blue_Bird @ 2020-05-24 14:31:42
@[bilibili官方](/user/234224)
> https://zh.cppreference.com/w/cpp/language/operator_arithmetic
>
> 任何情况下,若右操作数的值为负或大于等于提升后左操作数中的位数,则行为未定义。
对 $64$ 位整型左移 $64$ 位是未定义行为
by zhanghengrui @ 2020-05-24 14:48:49
@[hjx__hjx](/user/320993) 你指谁的?
by 绿绵羊 @ 2020-05-24 14:54:28
我的吗?
by 绿绵羊 @ 2020-05-24 14:54:36
@[zhanghengrui](/user/110634) 谢谢
by 青鸟_Blue_Bird @ 2020-05-24 15:30:35