你这第三个样例都过不了诶
by yu__xuan @ 2020-01-18 21:01:00
@[yu__xuan](/user/142110) 我也迷啊
by AIerX @ 2020-01-18 21:14:23
@[AIerX](/user/243252) dfs的第二个参数表示的啥。
by yu__xuan @ 2020-01-18 21:25:52
@[yu__xuan](/user/142110) 谢谢,就这个参数开小了,气死我,已过
by AIerX @ 2020-01-18 21:52:10
@[yu__xuan](/user/142110)
```
#include<iostream>
#include<cstdio>
using namespace std;
unsigned long long f[65]; //数据要求 开大 一定要unsigned long long 无需高精
unsigned long long k;
int n,aim[65];
void calculator()
{
f[0]=1;
for(int i=1;i<=64;i++)
{
f[i]=f[i-1]*2;
// cout<<f[i]<<((i%4==0)? "\n" : " "); 用于计算2^n 并打出检查;
}
}
void dfs(int i,unsigned long long judge)
{
if(i==0)//分类讨论 该位顺序 :0 1
{
--n;
if(k>=judge)
{
aim[n]=1;
if(n==1)return ;
dfs(1,judge+f[n-2]);
}
else
{
aim[n]=0;
if(n==1)return ;
dfs(0,judge-f[n-2]);
}
}
else // 该位顺序 :1 0
{
--n;
if(k>=judge)
{
aim[n]=0;
if(n==1)return ;
dfs(1,judge+f[n-2]);
}
else
{
aim[n]=1;
if(n==1)return ;
dfs(0,judge-f[n-2]);
}
}
}
int main()
{
// -------------- 递归法
calculator();
cin>>n>>k;
int n1=n;
if(k>=f[n-1])
{
aim[n]=1;
dfs(1,f[n-1]+f[n-2]);//right
}
else
{
aim[n]=0;
dfs(0,f[n-1]-f[n-2]);//left
}
for(int i=n1;i>=1;i--)
cout<<aim[i];
return 0;
}
```
正解
by AIerX @ 2020-01-18 21:55:07