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 ...
随机推荐
- Root resource classes
Overview A root resource class is the entry point into a JAX-RS implemented RESTful Web service. It ...
- trie树--详解
文章作者:yx_th000 文章来源:Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 转载请注明,谢谢合作.关键词:trie trie树 数据结 ...
- 【leetcode】Majority Element (easy)(*^__^*)
Given an array of size n, find the majority element. The majority element is the element that appear ...
- POJ 1781
#include <iostream> #include <string> #include <cmath> using namespace std; unsign ...
- 360抢票 网站维护中 && 你的登录被踢了!
本来在超市犹豫到底该买哪种暖手袋,犹豫了差不多半个多小时,还没决定好,一看时间还有8分钟到10点,遂狂奔回寝室抢票. 结果,360抢票被12306秒了—— 猜测原因是12306的验证码改了(变成动态的 ...
- js call apply bind简单的理解
相同点:JS中call与apply方法可以改变某个函数执行的上下文环境,也就是可以改变函数内this的指向.区别:call与apply方法的参数中,第一个参数都是指定的上下文环境或者指定的对象,而ca ...
- 近期概况&总结
下午考完英语的学考就要放假啦,是衡中的假期啊QAQ 所以灰常的激动,一点也不想写题(我不会告诉你其实假期只有一个晚上.. 自从CTSC&APIO回来之后就一直在机房颓颓颓,跟着zcg学了很多新 ...
- 李洪强iOS开发之OC语言description方法和sel
OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...
- java @param参数注解
注解,@param是参数的解释.如/***@param s 这里表示对s的文字说明,描述 */ public void aa(String s){}一般java中@表示注解,解释一个方法,类,属性的作 ...
- [iOS]如何给Label或者TextView赋HTML数据
// // ViewController.m // text // // Created by 李东旭 on 16/1/22. // Copyright © 2016年 李东旭. All rights ...