计蒜客 置换的玩笑(深搜)
来源:互联网 发布:上海房地产成交数据 编辑:程序博客网 时间:2024/05/16 15:04
传送门
题目大意:
小蒜头又调皮了。这一次,姐姐的实验报告惨遭毒手。
姐姐的实验报告上原本记录着从 1 到 n 的序列,任意两个数字间用空格间隔。但是“坑姐”的蒜头居然把数字间的空格都给删掉了,整个数字序列变成一个长度为 1 到 100 的且首部没有空格的数字串。
现在姐姐已经怒了,蒜头找你写个程序快点把试验数据复原。
输入
输入文件有一行,为一个字符串——被蒜头搞乱的实验数据。
字符串的长度在 1 到 100 之间。
输出
输出共一行,为姐姐的原始测试数据—— 1 到 n 的输出。
任意两个数据之间有一个空格。
如果有多组符合要求的正确解,输出其中任意一组即可。
本题答案不唯一,符合要求的答案均正确
样例输入
4111109876532
样例输出
4 1 11 10 9 8 7 6 5 3 2
解题思路:
就是从第一位开始往后搜,找到一个解,然后退出,因为串长最多是100,
代码:
#include <iostream>#include <string.h>#include <stdio.h>using namespace std;const int MAXN = 1e2+5;string s;int len, sum, ok;int vis[MAXN], has[MAXN];void dfs(int i){ if(ok) return ; if(i >= len-1){ for(int i=0; i<len; i++){ putchar(s[i]); if(vis[i] && i!=len-1) putchar(' '); } puts(""); ok = 1; return; } if(!vis[i]){ int tmp = s[i]-'0'; if(!has[tmp] && tmp<=sum && s[i+1]!='0'){//不能以0打头 vis[i] = 1, has[tmp] = 1; dfs(i+1); vis[i] = 0, has[tmp] = 0; } } if(!vis[i+1]){ int tmp = (s[i]-'0')*10+(s[i+1]-'0'); if(!has[tmp] && tmp<=sum && s[i+2]!='0'){ vis[i+1] = 1, has[tmp] = 1; dfs(i+2); vis[i+1] = 0, has[tmp] = 0; } }}int main(){ while(cin>>s){ len = s.length(); sum = (len-9)/2+9; memset(has, 0, sizeof has); has[0] = 1; memset(vis, 0, sizeof vis); ok = 0; dfs(0); } return 0;}
阅读全文
0 0
- 计蒜客 置换的玩笑(深搜)
- 计蒜客-置换的玩笑
- 计算之道(置换的玩笑)
- 置换的玩笑
- 解题报告:置换的玩笑
- 计算之道 (置换的玩笑)搜索
- C、置换的玩笑-------(计蒜之道 测试赛)
- 置换的玩笑(搜索)(中等)(计蒜之道 测试赛 c)
- 天大的玩笑
- 可爱的玩笑
- 玩笑
- (愚人节玩笑)历史上最奇怪的圆周率计算法
- 关于死亡的种种玩笑
- 天下的玩笑何其多
- 饮水机与愚人节的玩笑
- 这个玩笑开的比较大
- 郁闷的玩笑我该怎么办
- 愚人节后的玩笑--遭遇0Day
- 一道题,结果貌似正确,但内存超限QAQ
- 用if语句,从键盘输入你的身高h和体重w,计算你的体指数!
- 前端之常见问题及解决方案
- JDBC的那点事之DatabaseMetaData之获取数据库所有表
- Qt报错:myudp.h:4: error: expected identifier or '(' before string constant
- 计蒜客 置换的玩笑(深搜)
- Bug管理系统UML2.0建模实例(三)
- 欢迎使用CSDN-markdown编辑器
- 如何实现一个malloc
- 7.1 分析并写出下面程序的运行结果
- 2017-11-24 A星 动态更新
- python scrapy框架爬艺龙动态评论
- MySQL学习(三)
- Java SE 1.基本语法