Code(poj 17801)
求出一个长度为10^n+n-1的序列,其中包含了所有的n位数(一共10^n个数,从00000(n个0)~10^n-1)
/*
典型的欧拉回路题目
对于n=4为密码想要序列最短 那么 1234 234? 这两个一定挨着,
我们就把123和34?之间连一条边权为1234?的边,这样把所有的边只找一遍,
就把所有的点连了起来
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#define M 1000010
using namespace std;
int head[M],vis[M],stack[M],ans[M],n,k,cnt,m;
struct node
{
int v,pre,t;
};node e[M];
void add(int x,int y,int z)
{
++cnt;
e[cnt].v=y;
e[cnt].t=z;
e[cnt].pre=head[x];
head[x]=cnt;
}
void dfs()
{
int top=;stack[]=;
while(top)
{
int i=stack[top--];bool flag=false;
for(int j=head[i];j;j=e[j].pre)
if(!vis[e[j].t])
{
vis[e[j].t]=;
stack[++top]=i;
stack[++top]=e[j].v;
flag=true;break;
}
if(!flag)ans[++m]=i;
}
}
void init()
{
if(n==)
{
printf("0123456789\n");
return;
}
k=;
for(int i=;i<n;i++)k*=;
for(int i=;i<k;i++)
{
int x=i%(k/);
for(int j=;j>=;j--)
{
int y=x*+j,z=i*+j;
add(i,y,z);
}
}
m=;
dfs();
for(int i=;i<n-;i++)ans[++m]=;
printf("%d",ans[m]);
for(int i=m-;i>=;i--)printf("%d",ans[i]%);
printf("\n");
}
int main()
{
while(scanf("%d",&n)==)
{
if(!n)break;
memset(e,,sizeof(e));
memset(head,,sizeof(head));
memset(vis,,sizeof(vis));
memset(ans,,sizeof(ans));
cnt=;
init();
}
return ;
}
Code(poj 17801)的更多相关文章
- Code POJ - 1850 组合数学
题意 :字符串从a=1 b=2 c=3....z=26 ab=27开始编号 每个都是升序的 给出字符串问是几号 思路:主要是要看n位字符串有多少个 这里需要用组合数学的思想 组合数用杨辉三角形递推 ...
- Code POJ - 1780(栈模拟dfs)
题意: 就是数位哈密顿回路 解析: 是就算了...尼玛还不能直接用dfs,得手动开栈模拟dfs emm...看了老大半天才看的一知半解 #include <iostream> #inclu ...
- [题解]poj 1274 The Prefect Stall
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22736 Accepted: 10144 Description Far ...
- 【POJ】【1160】Post Office
DP/四边形不等式 邮局,经典的四边形不等式例题! 关于四边形不等式的学习请看 赵爽论文<动态规划加速原理之四边形不等式> 题目总结&题解:http://blog.csdn.net ...
- 【POJ】【1821】Fence
DP/单调队列优化 题意:k个人粉刷总长为n的墙壁(或者说栅栏?),每个人有一个必刷点s[i](这个人也可以一点也不刷,如果刷就必须刷这个点),最大粉刷长度l[i](必须是连续粉刷一段),和粉刷一格的 ...
- 【POJ】【2449】Remmarguts' Date
K短路/A* 经(luo)典(ti) K短路题目= = K短路学习:http://www.cnblogs.com/Hilda/p/3226692.html 流程: 先把所有边逆向,做一遍dijkstr ...
- 【POJ】【2891】Strange Way to Express Integers
中国剩余定理/扩展欧几里得 题目大意:求一般模线性方程组的解(不满足模数两两互质) solution:对于两个方程 \[ \begin{cases} m \equiv r_1 \pmod {a_1} ...
- 【POJ】【2699】The Maximum Number of Strong Kings
网络流/最大流/二分or贪心 题目大意:有n个队伍,两两之间有一场比赛,胜者得分+1,负者得分+0,问最多有几只队伍打败了所有得分比他高的队伍? 可以想到如果存在这样的“strong king”那么一 ...
- 【POJ】【2987】Firing
网络流/最大权闭合子图 胡伯涛论文里有讲…… sigh……细节处理太伤心了,先是count和ans输出弄反了,改过来顺序时又忘了必须先算出来ans!要是不执行一下Dinic的话count就无意义了…… ...
随机推荐
- js angular 时间戳转换成日期格式 年月日 yyyy-MM-dd
昨天写项目,要把时间戳转换成日期格式发给后端 我就去网上找 看到的一些都不是我想要的 索性自己就写了一个如图 下面是angular 模式 $scope.getMyDate = function(str ...
- Linux安装MySQL标准教程
导读: 本文主要介绍 CentOS 系统二进制安装 MySQL 5.7.23 版本的安装步骤,其他版本安装过程相似. 1.前置准备 卸载旧版MySQL 查看rpm包 rpm -qa|grep mysq ...
- 51nod2006 飞行员配对(二分图最大匹配)
2006 飞行员配对(二分图最大匹配) 题目来源: 网络流24题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 第二次世界大战时期,英国皇家空军从沦陷国 ...
- Snackbar:用它来替换Toast 显示短提示
简介 Snackbar 它是Toast的子类.主要用来提示短暂的提示信息后,然后它自动消失. 它寄生在普通view上,具有一些基本功能. 它寄生在 CoordinatorLayout 时,有以下两个特 ...
- css为tbody或者li奇数偶数行样式
<style> table tbody tr:nth-child(odd){ background:#fff; } table tbody tr:nth-child(even){ back ...
- 笔试题的各种trick
%x 默认去掉前导零 #include<stdint.h> #include<stdio.h> union X { int32_t a; struct ...
- Linux软件管理和安装
软件安装和管理软件包1.bin文件.bin2.rpm包3.源码压缩包 安装软件的步骤: 1.检查是否已经安装 rpm -qa | grep jdk 2.下载软件包 3.安装 依赖 rpm 包,已经编译 ...
- redis学习-sds数据类型
今天开始了redis的学习,本来想直接从源码看起的,不过看到有篇对redis介绍的基础教程 <Redis 设计与实现(第一版)> 于是决定从这个开始入门. 1.数据类型定义 typedef ...
- 【C++】朝花夕拾——树(开篇)
树 ===================我是分割线====================== 1. 定义: 一些结点的集合,集合可以为空.定义树的自然方式是递归的方法. 2. 相关概念: 根(ro ...
- Java基础——异常
一.什么是异常 异常的英文单词是exception,字面翻译就是“意外.例外”的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误.比如使用空的引用.数组下标越界. ...