dfs_困难串
来源:互联网 发布:nginx 模型 编辑:程序博客网 时间:2024/04/27 17:38
/*如果一个字符串包含两个相邻的重复字串,则称它是“容易的串”,其他串称为“困难的串”。例如,BB,ABCDACABCAB,ABCDABCD都是容易的,而D,DC,ABDAB,CBABCBA都是困难的。输入正整数n和L,输出由前L个字符组成的,字典序第k小的困难的串。例如,当L=3时,前7个困难的串分别为:A,AB,ABA,ABAC,ABACA,ABACAB,ABACABA.输入保证答案不超过80个字符。样例输入:7 330 3样例输出:ABACABAABACABCACBABCABACABCACBACABA*/#include <iostream>#include<algorithm>#include<queue>#include<stack>#include<cmath>#include<string.h>#include<stdio.h>#include<stdlib.h>using namespace std;#define maxn 1000int cnt,n,L;int S[maxn];int dfs(int cur)//返回0表示已经得到解,无须继续搜索{ int i,ok,j,k,equals; if(cnt++==n)//输出方案 { for(i=0; i<cur; i++) printf("%c",'A'+S[i]); printf("\n"); return 0; } for(i=0; i<L; i++) { S[cur]=i; ok=1; for(j=1; 2*j<=cur+1; j++) //尝试长度为j*2的后缀 { equals=1; for(k=0; k<j; k++) if(S[cur-k]!=S[cur-k-j])//检查后一半是否等于前一半 { equals=0; break; } if(equals) { ok=0; break; } } if(ok) //递归搜索,如果找到解,则直接退出 if(!dfs(cur+1)) return 0; } return 1;}int main(){ while(~scanf("%d%d",&n,&L)) { cnt=0; dfs(0); } return 0;}
0 0
- dfs_困难串
- 困难的串
- 困难的串
- 困难的串问题
- 【回溯】困难的串
- 输出困难的串
- 困难的串
- 困难的串
- 困难的串
- 困难的串题解
- uva困难的串
- UVA129困难的串
- UVA129困难的串
- 困难的串
- 困难的串UVa129
- 困难
- 困难
- 困难
- 并发管理工作队列(kernel译文[1])
- 按照左右半区的方式重新组合单链表
- 小马哥----高仿米4 主板型号TC01刷机救砖 拆机主板多图展示 6582芯片
- 数据从前台传到后台乱码
- 我是菜鸟:java中多线程机制笔记
- dfs_困难串
- 分享sdk
- Windbg 设置成默认调试器
- zoj 3876 May Day Holiday (基姆拉尔森计算公式)
- Department Highest Salary
- 【运维规范】修改Windows 操作系统用户的密码之前,应该做的核查工作
- R语言基础
- 学习ASP .NET MVC5官方教程总结(七)Edit方法和Edit视图详解
- DB_FILE_NAME_CONVERT