例题7-5 困难的串(Krypton Factor, UVa 129)

来源:互联网 发布:数据备份软件下载 编辑:程序博客网 时间:2024/05/22 01:27
这题乍一看好像是子集生成诶。。
主要问题就在于没添加一个字符后判断是否有连续相同子串。。
由于对每个串而言,所有的前缀都是已经判断过无相同的。。所以只需要判断后缀即可。
#include <iostream>#include <string>#include <vector>#include <stack>#include <queue>#include <deque>#include <set>#include <map>#include <algorithm>#include <sstream>#include <utility>#include <cstring>#include <cstdio>#include <cstdlib>#include <ctime>#include <cmath>#include <cctype>#define CLEAR(a, b) memset(a, b, sizeof(a))#define IN() freopen("in.txt", "r", stdin)#define OUT() freopen("out.txt", "w", stdout)#define LL long long#define maxn 105#define maxm 10005#define mod 1000000007#define INF 1000000007#define eps 1e-5#define PI 3.1415926535898#define N 52using namespace std;//-------------------------CHC------------------------------//int L, n, cnt;char a[maxn];bool check(int cur, int c) {char ch = 'A' + c;for (int i = 1; i <= (cur + 1) >> 1; ++i) {bool same = true;for (int j = 0; j < i; ++j) {if (a[cur - j] != a[cur - i - j]) same = false;}if (same) return false;}return true;}bool dfs(int cur) {if (cnt == n) {for (int i = 0; i < cur; ++i) {if (i % 64 && i % 4 == 0) putchar(' ');else if (i && i % 64 == 0) putchar('\n');putchar(a[i]);}printf("\n%d\n", cur);return true;}for (int i = 0; i < L; ++i) {bool ok = true;a[cur] = 'A' + i;if (check(cur, i)) {cnt++;if (dfs(cur + 1)) return true;}}return false;}int main() {while (~scanf("%d%d", &n, &L) && (n || L)) {cnt = 0;dfs(0);}return 0;}

原创粉丝点击