poj 1392 Ouroboros Snake
题目描述:
咬尾蛇是古埃及神话中一种虚构的蛇。它经常把尾巴放在自己的嘴巴里,不停地吞噬自己。
环数类似于咬尾蛇,它是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的更多相关文章
- POJ 1392 Ouroboros Snake(数位欧拉)
题目链接:http://poj.org/problem?id=1392 题目大意:题意看的我头痛,其实跟HDU2894差不多,但是这题要求输出这条路径上第k个数,而不是输出路径. 解题思路:也跟HDU ...
- poj 1780 , poj 1392 欧拉回路求前后相互衔接的数字串
两道题目意思差不多 第一题是10进制 , 第二题是2进制的 都是利用欧拉回路的fleury算法来解决 因为我总是希望小的排在前面,所以我总是先将较小数加入栈,再利用另一个数组接收答案,但是这里再从栈中 ...
- Ouroboros Snake POJ - 1392(数位哈密顿回路)
看hdu 2894的题意 两个题一样 旋转鼓的表面分成m块扇形,如图所示(m=8).图中阴影区表示用导电材料制成,空白区用绝缘材料制成,终端a.b和c是3(k=3)处接地或不是接地分别用二进制信号0 ...
- 欧拉路&&欧拉回路 概念及其练习
欧拉路: 如果给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,这条路称为欧拉路: 如果给定无孤立结点图G,若存在一条回路,经过图中每边一次且仅一次,那么该回路称为欧拉回路. 存在欧拉回路的 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 【转】欧拉回路&特殊图下的哈密顿回路题集
转自:http://blog.csdn.net/shahdza/article/details/7779385 欧拉回路[HDU]1878 欧拉回路 判断3018 Ant Trip 一笔画问题1116 ...
- hdu图论题目分类
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- HDU图论题单
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
随机推荐
- 《剑指Offer》- 面试题3
<剑指Offer——名企面试官精讲典型编程题> 面试题3: 二维数组元素从左到右.从上到下递增,输入一个二维数组和一个整数, 查找该整数. 自己的思路:有序条件下进行查找,当然最简单 ...
- [转载]MongoDB 标准连接字符串
MongoDB 标准连接字符串 mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[data ...
- MVC4 错误: 检测到有潜在危险的 Request.Form值
说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止.该值可能指示存在危及应用程序安全的尝试,如跨站点脚本攻击.若要允许页面重写应用程序请求验证设置,请将 httpRuntime ...
- 完全卸载Oracle方法
手动卸载 软件环境: 1.Windows XP + Oracle 10g 2.Oracle安装路径为:d:\Oracle 1.如果数据库配置了自动存储管理(ASM),应该先删除聚集同步服务CSS(cl ...
- 循环队列实现(C++) Ring Buffer
循环队列:队列有着先入先出的特性.但是对于队列如果删除队头以后剩下的空间将不会被释放,又由于队列只能由队尾插入这就导致被删除部分的空间被浪费.解决这个问题就是循环队列.循环队列顾名思义就是将队列串起来 ...
- Android 问题流水总结
先来一篇环境搭建的博客 这些都是大同小异. http://blog.csdn.net/yzhj2005/article/details/6980676 http://blog.csdn.net/wan ...
- What is the Best Programming Language to Learn in 2014?
It’s been a year since I revealed the best languages to learn in 2013. Once again, I’ve examined the ...
- lintcode 中等题:permutations 全排列
题目 全排列 给定一个数字列表,返回其所有可能的排列. 您在真实的面试中是否遇到过这个题? Yes 样例 给出一个列表[1,2,3],其全排列为: [ [1,2,3], [1,3,2], [2,1,3 ...
- lintcode:Palindrome Partitioning 分割回文串
题目: 分割回文串 给定一个字符串s,将s分割成一些子串,使每个子串都是回文串. 返回s所有可能的回文串分割方案. 样例 给出 s = "aab",返回 [ ["aa&q ...
- 如何配置JAVA的环境变量、Tomcat环境变量
配置JAVA环境变量 1.右击[我的电脑]---[属性]-----[高级]---[环境变量],如图: 2.选择[新建系统变量]--弹出“新建系统变量”对话框,在“变量名”文本框输入“JAVA_HOME ...