KEY公司开发出一种新的保险箱。要打开保险箱,不需要钥匙,但需要输入一个正确的、由
n位数字组成的编码。这种保险箱有几种类型,从给小孩子玩的玩具(2位数字编码)到军用型的
保险箱(6位数字编码)。
当正确地输入最后一位编码后,保险箱就立刻打开了。保险箱上没有“确定”键。当你输入
超过n位数字,则只有最后n位数字有效。例如,对一种4位数字编码的型号,如果正确的编码
为4567,你想输入的编码为1234567890,则保险箱的门会在你输入数字7后马上就打开了。
为了达到这种效果所需要设计的软件其实很简单。对n位数字编码的型号,保险箱始终处于
10
(n-1)
种内部状态之一。保险箱的当前状态只需用最后输入的n-1位数字表示,其中有一种状态(例
如,对前面的例子,就是456)被记为“开锁状态”。如果保险箱处于“开锁状态”,且输入最后
一位正确的数字(例如,在上面的例子中就是7),保险箱的门就打开了;否则保险箱切换到对应
的新状态。例如,如果保险箱的当前状态为456,接着输入8,则保险箱的状态切换到568。
为了开保险箱,一个繁琐的策略是一位接一位地输入所有可能的编码。然而,在最坏情况下,
这需要按键n×10
n次(有10
n组可能的编码,每个编码有n位)。而选择一个好的数字序列,最
多只需要按键10
n
+ n - 1次就可以打开保险箱了:你需要做的就是找到一个数字序列包含所有的
n位数一次且仅一次。KEY公司宣称,对军用型号(n = 6),当今最快的计算机也需要数十亿年
的时间才能找到这样的数字序列,但是很显然他们不知道有些程序员能在几分钟就能找到这样的
数字序列。

这个题目实际上就是欧拉回路的旋转鼓轮的应用。

把前一个数的后n-1位与后一个数的前n-1位相同时即能够前后相连接

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
#define M 100000
int list[M];
int stack[M*];//用数组模拟栈结构
char ans[M*];
int s,a;
void search(int v,int m)
{
int w;
while(list[v]<){
w=v*+list[v];
list[v]++;
stack[s++]=w;
v=w%m;
}
}
int main()
{
int n,m,i,v;
while(scanf("%d",&n)&&n!=){
if(n==) {printf("0123456789\n");continue;}
s=,a=,v=;
m=pow(10.0,n-);
for(i=;i<m;i++) list[i]=;
search(v,m);
while(s){
v=stack[--s];
ans[a++]=v%+'';
v/=;
search(v,m);
}
for(i=;i<n;i++) printf("");
while(a) printf("%c",ans[--a]);
printf("\n");
}
return ;
}

POJ1780 Code的更多相关文章

  1. POJ1780 Code(欧拉路径)

    n位密码,要用尽可能短的序列将n位密码的10n种状态的子串都包括,那么要尽量地重合. 题目已经说最短的是10n + n - 1,即每一个状态的后n-1位都和序列中后一个状态的前n-1位重合. 这题是经 ...

  2. Visual Studio Code 代理设置

    Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器,在十多年的编程经历中,我使用过非常多的的代码编辑器(包括 IDE),例如 Fron ...

  3. 我们是怎么做Code Review的

    前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ...

  4. Code Review 程序员的寄望与哀伤

    一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...

  5. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  6. 在Visual Studio Code中配置GO开发环境

    一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github ...

  7. 代码的坏味道(14)——重复代码(Duplicate Code)

    坏味道--重复代码(Duplicate Code) 重复代码堪称为代码坏味道之首.消除重复代码总是有利无害的. 特征 两个代码片段看上去几乎一样. 问题原因 重复代码通常发生在多个程序员同时在同一程序 ...

  8. http status code

    属于转载 http status code:200:成功,服务器已成功处理了请求,通常这表示服务器提供了请求的网页 404:未找到,服务器未找到 201-206都表示服务器成功处理了请求的状态代码,说 ...

  9. Visual Studio Code——Angular2 Hello World 之 2.0

    最近看到一篇用Visual Studio Code开发Angular2的文章,也是一篇入门教程,地址为:使用Visual Studio Code開發Angular 2專案.这里按部就班的做了一遍,感觉 ...

随机推荐

  1. nodejs on raspi

    一. https://cnodejs.org/topic/54032efa9769c2e93797cd06 其中的 “安装Node.js” 一节 注意事项: 1. 它用的是v0.10.26(很早的版本 ...

  2. android开发学习 ------- Error:Failed to open zip file.

    我们用Android Studio   Sync Project项目的时候,会出现如下的错误: 解决方案: Project视图下, 这块 https 改为 http 就可以了.

  3. iOS面试题之内存管理

    本文围绕内存管理的几种方法展开叙述. 1.内存管理是什么? 内存管理,就是对内存资源进行优化. 2.内存管理的三种方法? Objective-C的内存管理主要有三种方式ARC(自动内存计数).MRC( ...

  4. JDK使用最多的模式之一--观察者模式

    公司接到新任务,需要做一个气象监测应用.该应用将实现三个界面:当前气象状态,气象统计以及气象预报.应用从WeatherObject对象中获取所需数据:温度,湿度,气压.当然,为了可扩展性,该应用同时也 ...

  5. BZOJ1132: [POI2008]Tro(叉积 排序)

    题意 世上最良心题目描述qwq 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Sol 直接模拟是$n^3$的. 考虑先枚举一个$i$,那么我们要算的就是$\sum_ ...

  6. pre-network android 网络优化预加载框架

    网络优化是所有app开发中非常重要的一部分,如果将网络请求前置就是在点击跳转activity之前开始网络加载那么速度将会有质的提升.也就是网络预先加载框框架. 网络预加载框架,监听式网络前置加载框架- ...

  7. Bundle的用法

    一.API文档说明 1.介绍 用于不同Activity之间的数据传递 1.重要方法 clear():清除此Bundle映射中的所有保存的数据. clone():克隆当前Bundle containsK ...

  8. IOS状态栏

    IOS状态栏是什么地方? 它是IOS设备屏幕顶部显示信号以及电池的区域.状态栏默认的高度是20像素,状态栏在软件开发中有何作用?联网应用中可在自动帮用户下载数据时使用,推荐在状态栏中予以显示.状态栏可 ...

  9. resharper10 注册方法

    注册工具:http://pan.baidu.com/s/1bnFjGfX 注册方法: 1 编辑Products.json文件,留下自己要注册的产品路径即可. 2 运行patch.exe 3 使用Ser ...

  10. python调用脚本或shell的方式

    python调用脚本或shell有下面三种方式: os.system()特点:(1)可以调用脚本.(2)可以判断是否正确执行.(3)满足不了标准输出 && 错误 commands模块特 ...