JSK424:置换的玩笑(搜索)

小蒜头又调皮了。这一次,姐姐的实验报告惨遭毒手。

姐姐的实验报告上原本记录着从 1 到 n 的序列,任意两个数字间用空格间隔。但是“坑姐”的蒜头居然把数字间的空格都给删掉了,整个数字序列变成一个长度为 1 到 100 的且首部没有空格的数字串。

现在姐姐已经怒了,蒜头找你写个程序快点把试验数据复原。

输入

输入文件有一行,为一个字符串——被蒜头搞乱的实验数据。

字符串的长度在 1 到 100 之间。

输出

输出共一行,为姐姐的原始测试数据—— 1 到 n 的输出。

任意两个数据之间有一个空格。

如果有多组符合要求的正确解,输出其中任意一组即可。

样例输入

4111109876532

样例输出

4 1 11 10 9 8 7 6 5 3 2

Solve:

蜜汁DFS,考虑的东西有点多,但是反正就是个生成全排列啦,就是1~n内的每个数都出现且只出现一次,当然这个n也是在搜完之后才找出来了

Code:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 char data[666] = {‘\0‘};
 4 bool vis[666] = {0};
 5 int ans[666] = {0};
 6 int len = 0;
 7 bool flag = 0;
 8 int ml;
 9 void Dfs(int pos , int num)
10 {
11     if(flag)
12         return ;
13     if(pos >= len)
14     {
15         int chu[110] = {0};
16         int mx = -1;
17         for(int i = 0 ; i < num ; ++i)
18         {
19             mx = max(mx , ans[i]);
20             chu[ans[i]] = 1;
21         }
22         bool gao = 1;
23         for(int i = 1 ; i <= mx ; ++i)
24         {
25             if(!chu[i])
26             {
27                 gao = 0;
28                 break;
29             }
30         }
31         if(gao)
32         {
33             for(int i = 0 ; i < num ; ++i)
34                 printf("%d " , ans[i]);
35             printf("\n");
36             flag = 1;
37         }
38         return ;
39     }
40     int next = data[pos] - 48;
41     if(!vis[next])
42     {
43         vis[next] = 1;
44         ans[num] = next;
45         Dfs(pos + 1 , num + 1);
46         vis[next] = 0;
47     }
48     if(pos + 1 < len)
49     {
50         next = (data[pos] - 48) * 10 + (data[pos + 1] - 48);
51         if(!vis[next])
52         {
53             vis[next] = 1;
54             ans[num] = next;
55             Dfs(pos + 2 , num + 1);
56             vis[next] = 0;
57         }
58     }
59     return;
60 }
61 int main()
62 {
63     scanf(" %s" , data);
64     len = strlen(data);
65     Dfs(0 , 0);
66 }

时间: 2024-10-06 00:12:12

JSK424:置换的玩笑(搜索)的相关文章

计算之道 (置换的玩笑)搜索

小蒜头又调皮了.这一次,姐姐的实验报告惨遭毒手. 姐姐的实验报告上原本记录着从 1 到 n 的序列,任意两个数字间用空格间隔.但是"坑姐"的蒜头居然把数字间的空格都给删掉了,整个数字序列变成一个长度为 1 到 100 的且首部没有空格的数字串. 现在姐姐已经怒了,蒜头找你写个程序快点把试验数据复原. 输入 输入文件有一行,为一个字符串--被蒜头搞乱的实验数据. 字符串的长度在 1 到 100 之间. 输出 输出共一行,为姐姐的原始测试数据-- 1 到 n 的输出. 任意两个数据之间有一

计蒜之道 测试赛 (BCD)

测试赛写写题解不会被吐槽吧... 淘汰赛车 时限:1000ms 内存:262144K 赛车比赛在潘多拉星球变得越来越流行了.但是他们的比赛跟我们平常的不太一样:n 辆赛车在一条长长的直道上展开同台竞技.每辆赛车的速度都为 1m/s,整条赛道在每一米都有坐标标记. 在比赛的赛车中,赛车 i 从 0 秒开始由 ai 向 bi 移动.到达 bi 之后转而返回由 bi 向 ai 移动.循环往复. 又是蒜头菌!原来这是蒜头菌正在玩的一个手机小游戏.蒜头菌可以在某些位置放下 TNT 炸毁某些赛车.因为他有

计蒜之道 測试赛

题目链接:http://www.jisuanke.com/minicourse/63 绿色能源 蒜头又要改变世界了. 这次他将为一些恶劣地形环境设计太阳能取电方案. 在最新的设计中,太阳能板被设置在一些太阳能塔上,与塔同高. 这一次,将有 n 座太阳能塔被设置.这些塔已经被提前制作完毕.当中 i 号塔高为 hi,如今project师须要确定将塔安置在哪些位置.以获得最大的总能量. 太阳能塔被安置的地形环境由 m 个点的多边形来表示.多边形的每一个点将会给出相应的坐标(xi, yi).xi < x

计蒜之道 测试赛

题目链接:http://www.jisuanke.com/minicourse/63 绿色能源 蒜头又要改变世界了.这次他将为一些恶劣地形环境设计太阳能取电方案. 在最新的设计中,太阳能板被设置在一些太阳能塔上,与塔同高. 这一次,将有 n 座太阳能塔被设置,这些塔已经被提前制作完成,其中 i 号塔高为 hi,现在工程师需要确定将塔安置在哪些位置,以获得最大的总能量. 太阳能塔被安置的地形环境由 m 个点的多边形来表示.多边形的每个点将会给出对应的坐标(xi, yi),xi < xi+1. 经过

论王宝强事件黑客教你人肉搜索的七种方法

作为敢抢奥运会头条的男人,宋喆遭遇了围追堵截.这次全民捉奸不仅是娱乐圈的狂欢,科技圈也神乱入了一下: 如果没有广大黑客技术爱好者的参与,狗仔们似乎也无法在几天之内扒出宋喆的身世.爱好.住址.开房记录,用体无完肤来形容毫不为过. [网友总结的宋喆个人信息(保护公民隐私,敏感信息已被打码)] 实际上,黑客们认真捉起奸来,可以获得诸多让人惊讶掉下巴的奇异信息.雷锋网决定向顶级黑客请教一下,暂时抛开法律和道德因素,究竟怎样人肉一个人呢?或者从反面来说,如果你不小心爱上了明星的媳妇而成为了全民公敌,如何避

[原创]用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则

[原创]用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则 转载请注明出处:http://www.codelast.com/ line search(一维搜索,或线搜索)是最优化(Optimization)算法中的一个基础步骤/算法.它可以分为精确的一维搜索以及不精确的一维搜索两大类.在本文中,我想用“人话”解释一下不精确的一维搜索的两大准则:Armijo-Goldstein准则 & Wolfe-Powell准则.之所以这样说,是因为我读到的所有最优

八,置换计划(下)

返回目录:http://www.cnblogs.com/wantnon/p/4649254.html 毛线鸟: 这的确是一个很有想象力的计划,我现在真心佩服计划的提出者--我父亲. 通过查阅互联网上的人体数据库,我们发现人类与天堂人在身体构造上基本是同构(数学概念,指保持一一映射)的.所以过去用于天堂人的虚拟化和逆虚拟化技术经过一点儿改造就可以适用于人类.剩下的挑战就是如何借人类公司之手生产出这种VR设备并使我们的目标使用它们. 当然起初也曾考虑过借助已成形的大公司来搞,但可惜没有找到合适的.并

搜索服务solr 一二事(1) - solr-5.5 使用自带Jetty或者tomcat 搭建单机版搜索服务器

solr,什么是solr,就是你要吃的东西“馊了”,不能吃了,out of date~ 嘛...开个玩笑,发音就是‘搜了’,专门用于搜索的一个开源框架,lunce就不说了,不好用,麻烦 来讲讲solr吧 目前最新更新的是6.0,4月7-8号更新的,哥不太喜欢用新出来的版本,多多少少会有bug,centos7出来后我至今使用的是6.5(实在无法忍受7啊...西吧) 6.0我也试着装了,但是会报错,日志文件找不到,自己新建一个也不行,去官方的jira看看,发现的确有这么一个bug,但是已经close

poj 3270 置换的运用

1.找出初始状态和目标状态.明显,目标状态就是排序后的状态. 2.画出置换群,在里面找循环.例如,数字是8 4 5 3 2 7,目标状态是2 3 4 5 7 8,能写为两个循环:(8 2 7)(4 3 5). 3.观察其中一个循环,明显地,要使交换代价最小,应该用循环里面最小的数字2,去与另外的两个数字,7与8交换.这样交换的代价是: sum - min + (len - 1) * min 化简后为: sum + (len - 2) * min 其中,sum为这个循环所有数字的和,len为长度,