本文主要是介绍UVA 1509 Leet(暴力),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
UVA 1509 Leet
题目链接
题意:给定一个字符串和一个字符串,第一个字符串字母可以映射1-k个字母,问第一个字符串能否表示成第二个字符串
思路:dfs暴力枚举即可
代码:
#include <cstdio>
#include <cstring>const int N = 305;
int t, k, n, m, v[N], len[N];
char a[60], b[60];
char hash[N][5];bool dfs(int nnow, int mnow) {if (n * 3 < m) return false;if (nnow == n && mnow == m) return true;if (nnow == n || mnow == m) return false;if (v[a[nnow]]) {if (len[a[nnow]] <= m - mnow) {if (strncmp(hash[a[nnow]], b + mnow, len[a[nnow]]) == 0) {if (dfs(nnow + 1, mnow + len[a[nnow]]))return true;}}}else {len[a[nnow]] = 0;for (int i = mnow; i < m && i < mnow + k; i++) {hash[a[nnow]][len[a[nnow]]++] = b[i];hash[a[nnow]][len[a[nnow]]] = '\0';v[a[nnow]] = 1;if (dfs(nnow + 1, i + 1)) return true;v[a[nnow]] = 0;}}return false;
}int main() {scanf("%d", &t);while (t--) {memset(v, 0, sizeof(v));scanf("%d%s%s", &k, a, b);n = strlen(a); m = strlen(b);printf("%d\n", dfs(0, 0) ? 1 : 0);}return 0;
}
这篇关于UVA 1509 Leet(暴力)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!