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 ...
随机推荐
- 运用 DataContractSerializer 存储本地对象
public void Save(string filename,State state) { DataContractSerializer ds = new DataContractSerializ ...
- css文件都写在一个里面还是每个页面都引用单独的css样式好?
因为网站比较小,外加网站页面有很多重复构件,决定采用“构件复用”搭建网页,但是遇到了一个问题.因为虽然有共同的css,但是每个页面或多或少都有独立的样式控制,到底是写在同一个css还是分离看上去清楚一 ...
- [设计模式] 21 策略模式 Strategy
在GOF的<设计模式:可复用面向对象软件的基础>一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.该模式使得算法可独立于使用它的客户而变化. 策略模 ...
- 【WCF--初入江湖】01 WCF编程概述
01 WCF编程概述 SOA的优点 1.服务独立于平台和工作环境.服务并不关心自己所处的环境,也不关心与之进行通信的服务所处的 环境. 2.服务相互隔离. 3.服务对协议.格式和传输中立. 4. ...
- zoj 2777 Visible Lattice Points(欧拉函数,基础)
题目 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<algo ...
- ubuntu下安装spark1.4.0
构建在hadoop2.6.0之上的 1.在官网下载spark-1.4.0-bin-hadoop2.6.tgz 2.解压到你想要放的文件夹里,tar zxvf spark-1.4.0-bin-hadoo ...
- Unique Binary Search Tree II
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...
- Java中LinkedList的remove方法真的耗时O(1)吗?
这个问题其实来源于Leetcode的一道题目,也就是上一篇日志 LRU Cache.在使用LinkedList超时后,换成ArrayList居然AC了,而问题居然是在于List.remove(Obje ...
- Java中Integer的源码学习
一.开始 public final class Integer extends Number implements Comparable<Integer> 1).由于类修饰符中有关键字 ...
- lintcode:插入区间
题目: 插入区间 给出一个无重叠的按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 样例 插入区间[2, 5] 到 [ ...