您的位置:首页 > 其它

bzoj1081: [SCOI2005]超级格雷码

2016-08-29 15:05 218 查看
这道题感谢yzh的指导.。。(我也不知道应不应该叫他大神)

这道题他发现了规律。。

以下内容转载yzh写的博客,欢迎到他的博客去看看。。

yzh博客主页

http://blog.csdn.net/mf_chris/article/details/52326615

假设是2 3:

答案是:00 10 20 21 11 01 02 12 22

分下组:00 10 20

21 11 01

02 12 22

也就是说,当第i个数是偶数时,第i-1个数是由大到小排列,当第i个数是奇数时,第i-1个数是由小到大排列。。

这道题我想了好久。。

看完他的博客之后恍然大悟。。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[110],n,B;
void dfs(int k,int t) {
if(k==n+1) {
for(int i=n;i>=1;i--) {
if(a[i]<10)
printf("%d",a[i]);
else
printf("%c",a[i]-10+'A');
}
printf("\n");
return ;
}
if(t==0) {
for(int i=0;i<B;i++) {
a[k]=i;
if(i%2==1)
dfs(k+1,1);
else
dfs(k+1,0);
}
}
else {
for(int i=B-1;i>=0;i--) {
a[k]=i;
if(i%2==1)
dfs(k+1,0);
else
dfs(k+1,1);
}
}
}
int main()
{
scanf("%d%d",&n,&B);
dfs(1,0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: