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. IP是什么 DNS 域名与IP有什么不同

    IP地址是在网络上分配给每台计算机或网络设备的32位数字标识.在Internet上,每台计算机或网络设备的IP地址是全世界唯一的.IP地址的格式是 xxx.xxx.xxx.xxx,其中xxx是 0 到 ...

  2. chartControl ViewType.Bar 用法测试

    使用方法 一. Datatable : chartControl1.Series.Clear(); DataTable dt = new DataTable(); dt.Columns.Add(&qu ...

  3. vue2 切换路由时 页面滚动到顶部 用游览器返回时 记住上页的位置

    官方用例:https://router.vuejs.org/zh-cn/advanced/scroll-behavior.html import Vue from 'vue' import Route ...

  4. kubernetes认证和serviceaccount

    Service Account 为 Pod 提供必要的身份认证.所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 usera ...

  5. codevs3002 石子归并 3

    题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使 ...

  6. 洛谷P4926 [1007]倍杀测量者(差分约束)

    题意 题目链接 Sol 题目中的两个限制条件相当于是 \[A_i \geqslant (K_i - T)B_i\] \[A_i(K_i + T) \geq B_i\] 我们需要让这两个至少有一个不满足 ...

  7. 章节七、5-Maps

    一.向map集合中添加元素 map.put package ZangJie7; import java.util.HashMap; import java.util.Map; public class ...

  8. Kotlin Native

    Kotlin Native 不是 Jni 的概念,它不仅仅是要与底层代码比如 C.C++ 交互,而且还要绕过 Jvm 直接编译成机器码供系统运行.也就是说,Kotlin 准备丢掉 Java 这根拐杖了 ...

  9. shell编程—简单的使用(二)

    使用shell编辑.sh使其输出hello tynam 1.新建一个.sh文件,然后进行编辑 vi hello_tynam.sh 2.进行编辑,先按i键进行激活,然后输入echo hello tyna ...

  10. shell编程—简介(一)

    1.shell概念 shell是一个用C语音编写的程序,他是用户使用Linux的桥梁 shell既是一种命令语音,又是一种程序设计语音 shell是指一种应用程序,这个应用程序提供一个界面,用户通过这 ...