uva 129(困难的串)
来源:互联网 发布:骚气的诗词 知乎 编辑:程序博客网 时间:2024/05/01 00:04
题目大意:如果一个字符串包含两个相邻的重复子串,则称它是"容易的串", 其他串称为"困难的串"; 列如, BB, ABCDACABCAB, ABCDABCD都是容易的串,而D, DC, ABDAB都是困难的串; 输入正整数n和L, 输出由前L个字符组成的, 字典序第n小的困难的串;
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n, L, cnt, ans;int a[85];int dfs(int cur){ if(cnt++ == n){ ans = cur; for(int i = 0; i < cur; ++i){ printf("%c", a[i]+'A'); if((i+1) % 4 == 0 && (i+1) % 64 != 0 && i != cur-1) printf(" "); else if((i+1) % 64 == 0) printf("\n"); } return 0; } else{ for(int i = 0; i < L; ++i){ a[cur] = i; int ok = 1; for(int j = 1; j*2 <= cur+1; ++j){ //尝试长度为j*2的后缀; int _equal = 1; for(int k = 0; k < j; ++k){ //检查后一半是否等于前一半 if(a[cur-k] != a[cur-k-j]){_equal = 0; break;} } if(_equal == 1){ //后一半等于前一半,方案不合法; ok = 0; break; } } if(ok){ if(!dfs(cur+1)) return 0; } } } return 1;}int main(){ while(scanf("%d%d", &n, &L) != EOF && (n || L)){ cnt = 0; dfs(0); if(cnt % 64 != 0) printf("\n"); printf("%d\n", ans); }}
0 0
- uva 129(困难的串)
- uva 129 困难的串
- UVA-129 困难的串
- uva困难的串
- 困难的串(Krypton Factor,UVa 129)
- Uva 129 Krypton Factor(困难的串)
- 困难的串(Krypton Factor,UVa 129)
- UVA-129 Krypton Factor 困难的串
- UVA 129 困难的串Krypton Factor (回溯法)
- 困难的串(Krypton Factor,UVa 129)
- 例题7-5 UVA 129 Krypton Factor (困难的串,搜索)
- 例题7-5 困难的串(Krypton Factor, UVa 129)
- 困难的串
- 困难的串
- 困难的串问题
- 【回溯】困难的串
- 输出困难的串
- 困难的串
- kafka--简介
- DOM对象和内置对象(上)
- HDU 3966 Aragorn's Story(树链剖分)
- JSON数据解析
- 【白书之路】1225 - Digit Counting 数字统计
- uva 129(困难的串)
- HDU1040 - As Easy As A+B (简单题)
- VIM 编辑器之快速入门
- KNN算法
- AppWidget简介
- 全排列和全组合
- Java线程通信练习之“生产者/消费者问题”
- 2013完美世界校招笔试题及答案
- hdoj 1002 A + B Problem II 【大数加法模板】