Problem UVA129-Krypton Factor

Accept:1959  Submit:10261

Time Limit: 3000 mSec

 Problem Description

通过了光明狮子的考验,小渡来到了创界山的第二层。没想到第二层的守护神——火焰凤凰正沉迷于字母游戏,不能自拔!为了尽快得到她的帮助,小渡决定出手帮她解决字母游戏的谜题。 字母游戏规则是这样的:
一个字母串里包含有两个相邻的重复子串则称为“水串”,否则为“火串”
例如AA、ABCABC都是"水串",而D、DC、ABDAD、CBABCBA都是“火串"。
输入正整数L和n,输出由前L个字母组成的、字典序第n个的"火串"。

 Input

多组输入n和L,1<=L<=26,n>0。输入0 0结束。

 Output

对于每个输入,输出第n个"火串"。在下一行输出“火串”的长度。你可以假设对于给定的L和n,至少存在n个“火串”。
由于这样的序列可能非常长,每4个字母分割成一组, 如果有超过16个这样的小组,请为第17组开始新的一行。
假设最大“火串”长度为80。
例如,当L = 3时,前7个“火串”是:
A
AB
ABA
ABAC
ABACA
ABACAB
ABACABA

 Sample Input

7 3
30 3
0 0
 

 Sample Ouput

ABAC ABA
7
ABAC ABCA CBAB CABA CABC ACBA CABA
28

题解:回溯法。当判断下一个字母能否添加进来时,只需判断目前字符串的后缀即可。

P.S.这个题的输出确实比较坑

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std; const int maxl = ;
int n,L,cnt;
char ans[maxl];
bool ok; bool Can_Prune(char *str){
int cur = strlen(str);
for(int i = (cur+)>>;i < cur;i++){
int len = cur-i;
int st = i-len;
char tmp[maxl];
strncpy(tmp,str+st,len*sizeof(char));
tmp[len] = ;
if(!strcmp(tmp,str+i)) return true;
}
return false;
} void dfs(char *ss,int cur){
if(ok) return;
for(int i = ;i < L;i++){
char ch = i+'A';
ss[cur] = ch;
ss[cur+] = '\0';
if(cur> && Can_Prune(ss)) continue;
cnt++;
if(cnt == n){
ok = true;
int con = ,len = strlen(ss);
for(int i = ;i < len;i++){
printf("%c",ss[i]);
if(i%== && i!=len-){
con++;
if(con == ){
con = ;
printf("\n");
}
else printf(" ");
}
}
printf("\n");
printf("%d\n",len);
return;
}
dfs(ss,cur+);
}
} int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
while(~scanf("%d%d",&n,&L) && (n||L)){
cnt = ;
ok = false;
memset(ans,,sizeof(ans));
dfs(ans,);
}
return ;
}

UVA129-Krypton Factor(搜索剪枝)的更多相关文章

  1. UVA.129 Krypton Factor (搜索+暴力)

    UVA.129 Krypton Factor (搜索+暴力) 题意分析 搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可. 注意的地方就是合法串的判断 ...

  2. UVA129 Krypton Factor 困难的串 dfs回溯【DFS】

     Krypton Factor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. uva129 - Krypton Factor 7.4.3 困难的串

      7.4.3困难的串 学习点:dfs加入返回值,递归搜索过程中如果有一个成功,就直接退出 //7.4.3 困难的串 #include<cstdio> #include<cstrin ...

  4. UVA129 —— Krypton Factor (氪因素)

    Input and Output In order to provide the Quiz Master with a potentially unlimited source of question ...

  5. 129 - Krypton Factor

    /*UVa129 - Krypton Factor --回溯问题.看例子可知道确定该字符串是按照从左到右依次考虑每个位置,当前位置填不上所有的字符时,需要回溯. -- */ #define _CRT_ ...

  6. Krypton Factor

    Krypton Factor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  7. NOIP2015 斗地主(搜索+剪枝)

    4325: NOIP2015 斗地主 Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 270  Solved: 192[Submit][Status] ...

  8. hdu 5469 Antonidas(树的分治+字符串hashOR搜索+剪枝)

    题目链接:hdu 5469 Antonidas 题意: 给你一颗树,每个节点有一个字符,现在给你一个字符串S,问你是否能在树上找到两个节点u,v,使得u到v的最短路径构成的字符串恰好为S. 题解: 这 ...

  9. hdu 5887 搜索+剪枝

    Herbs Gathering Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

随机推荐

  1. Python_简单三级菜单制作

    一:制作要求 1.三级菜单 2.可依次选择进入各子菜单 3.所需新知识点:字典,列表 *本文通过三种方法完成,第一种:只使用循环,第二种:使用列表,第三种:使用字典 二:FlowChart流程图 与上 ...

  2. 持续集成 自动化构建、测试、部署您的Coding代码

    持续集成(Continuous Integration)指的是,频繁地(一天多次)将代码集成到主干. 持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量. 它的核心措施是,代码集成到主干之前, ...

  3. python名片管理

    python名片管理是我根据视频自己敲敲的代码,后续学习会持续更新 代码 card_main.py import card_tools # 无限循环,由用户决定什么时候退出 while True: # ...

  4. laravel框架详解

    一.基础篇 1.概念 Laravel是一个有着美好前景的年轻框架,它的社区充满着活力,同时提供了完整而清晰的文档,而且为快速.安全地开发现代应用提供了必要的功能.2011年,Taylor Otwell ...

  5. gulp es6 转 es5

    npm install --save-dev gulp-babel babel-preset-es2015 var babel = require("gulp-babel"); / ...

  6. es6 语法 (Proxy和Reflect 的对比)

    { //原始对象 let obj={ time:'2017-03-11', name:'net', _r:123 }; //(代理商)第一个参数代理对象,第二个参数真正代理的东西 let monito ...

  7. 【代码笔记】Web-JavaScript-JavaScript错误

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  8. java方法中,传参是传值还是传址问题(对比C语言、C#和C++)

    问题引出: 编写一个简单的交换值的小程序,如果我们只是简单地定义一个交换函数接收两个数,在函数内部定义一个中间变量完成交换.那么当我们把a,b两个实参传给这个函数时,往往得不到预期的结果.这是为什么呢 ...

  9. Python 实现批量从不同的Linux服务器下载文件

    基于Python实现批量从不同的Linux服务器下载文件   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/file_for_downl ...

  10. 关于JBoss -“Closing a connection for you,please close them yourself”

    使用JNDI的方式从Jboss里获取数据连接(Connection)的方式,Jboss会管理connection,不需要自己手动去关闭,但Jboss老是提示需要自己来关闭connection,针对Jb ...