题目描述:
咬尾蛇是古埃及神话中一种虚构的蛇。它经常把尾巴放在自己的嘴巴里,不停地吞噬自己。
环数类似于咬尾蛇,它是2^n位的二进制数,具有如下性质:它能“生成”0~2^n-1之间的所有数。
生成方法是:给定一个环数,将它的2^n位数卷成一个圆圈,这样,就可以从中取出2^n组n位二进制数,以每个数的起始位置的下一个位置,
作为下一个数的起始位置。这样的圆圈称为n的环
圈。在本题中,只针对n的最小的环数。
例如,但n = 2时,只有4个环数:0011,0110,1100和1001,所以最小的环数为0011。
图5.18(a)给出了0011的Ouroboros圆圈。
图5.18(b)所示的表格描述了o(n;k)函数:它的值为n的最小的环数的环圈中的第k个数。你
的任务是编写程序,计算o(n;k)。
图5.18 咬尾蛇
输入描述:
输入文件中包含多个测试数据。每个测试数据占一行,为两个整数:n和k,1≤n≤15,0≤k<2^n
。输入文件最后一行为两个0,代表输入结束。
输出描述:
对输入文件中的每个测试数据,输出占一行,为求得的o(n;k)。
样例输入:  样例输出:
2 0
2 1
2 2
2 3
0 0
0
1
3
2 //就是上一题的 dfs版本了
// 1Y 提交时心里其实还是不怎么踏实的 呵呵
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#include <queue>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
#define MOD 1000000007
#define maxn 1<<16
int ls[maxn];
int ans[maxn],st[maxn];
int s,a;
int cnt;
void dfs(int n,int m,int dp){
// printf("m=%d ",m);
int v,u=n&m;
// printf("\n %d %d |",dp,ls[u]);
while(ls[u]<){
v=(u<<)+ls[u];
ls[u]++;
// printf("v= %d ",v);
dfs(v,m,dp+);
ans[cnt++]=v;
u=v&m;
if(ls[u]>=) u=v>>;
}
// printf("dp=%d\n",dp);
}
int main(){
int n,m;
int i;
int k;
while(scanf("%d %d",&n,&k),n|k){
m=<<(n-);
for(i=;i<=m;i++)
ls[i]=;
ls[]=;
cnt=;
dfs(,(<<(n-))-,);
// for(i=1;i<n;i++)
// printf("0");
if(k==){printf("0\n");continue;}
k--;
for(i=cnt-;k&&i>=;k--,i--)
;
printf("%d\n",ans[i]);
// printf("\n");
}
return ;
}

poj 1392 Ouroboros Snake的更多相关文章

  1. POJ 1392 Ouroboros Snake(数位欧拉)

    题目链接:http://poj.org/problem?id=1392 题目大意:题意看的我头痛,其实跟HDU2894差不多,但是这题要求输出这条路径上第k个数,而不是输出路径. 解题思路:也跟HDU ...

  2. poj 1780 , poj 1392 欧拉回路求前后相互衔接的数字串

    两道题目意思差不多 第一题是10进制 , 第二题是2进制的 都是利用欧拉回路的fleury算法来解决 因为我总是希望小的排在前面,所以我总是先将较小数加入栈,再利用另一个数组接收答案,但是这里再从栈中 ...

  3. Ouroboros Snake POJ - 1392(数位哈密顿回路)

    看hdu 2894的题意  两个题一样 旋转鼓的表面分成m块扇形,如图所示(m=8).图中阴影区表示用导电材料制成,空白区用绝缘材料制成,终端a.b和c是3(k=3)处接地或不是接地分别用二进制信号0 ...

  4. 欧拉路&&欧拉回路 概念及其练习

    欧拉路: 如果给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,这条路称为欧拉路: 如果给定无孤立结点图G,若存在一条回路,经过图中每边一次且仅一次,那么该回路称为欧拉回路. 存在欧拉回路的 ...

  5. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  6. 【转】欧拉回路&特殊图下的哈密顿回路题集

    转自:http://blog.csdn.net/shahdza/article/details/7779385 欧拉回路[HDU]1878 欧拉回路 判断3018 Ant Trip 一笔画问题1116 ...

  7. hdu图论题目分类

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  8. HDU图论题单

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  9. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

随机推荐

  1. 【Memcache】下载和安装

    下载: Win7 64bit 系统 下载过过很多版本,都无法安装,最后到这里下载,成功安装: http://blog.couchbase.com/memcached-windows-64-bit-pr ...

  2. uva 10994

    一开始想法太简单  错了好多遍 #include <cstdio> #include <cstdlib> #include <cmath> #include < ...

  3. Python性能分析指南

    http://www.admin10000.com/document/2861.html 尽管并非每个你写的Python程序都需要严格的性能分析,但了解一下Python的生态系统中很多优秀的在你需要做 ...

  4. 终于明白公测的beta 源自何处了

    A very early version of a software product that may not contain all of the features that are planned ...

  5. 0到N数其中三个数的全排列

    #include<iostream> using namespace std; int main(){ ; int count; count=; ;i<=N;i++) ;j<= ...

  6. Struts2 常用的常量配置

    在struts2-core-2.1.8.1.jar的org.apache.struts2包下面的default.properties资源文件里可以查到常用的常量配置,这些不用刻意的记住:忘记的时候可以 ...

  7. 李洪强iOS开发之 - 实现九宫格并使用SDWebImage下载图片

     李洪强iOS开发之 - 实现九宫格并使用SDWebImage下载图片  源码:  // //  ViewController.m //  08-九宫格扩展 // //  Created by 李洪强 ...

  8. Libsvm学习

        本篇博客转自 http://www.cppblog.com/guijie/archive/2013/09/05/169034.html     在电脑文件夹E:\other\matlab 20 ...

  9. [hackerrank]Palindrome Index

    简单题. #include <iostream> #include <string> using namespace std; int main() { int T; cin ...

  10. Spring transaction事务之roll back回滚

    转载自:http://blog.csdn.net/lovejavaydj/article/details/7635848 试验方法: 写一个单元测试,调用一个service层方法(发生对数据库进行写操 ...