65求助

P5657 [CSP-S2019] 格雷码

你这第三个样例都过不了诶
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


|