Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
108721 | 李承瀚 | [NOIP2000 普及组/提高组] 单词接龙 | C++ | 通过 | 100 | 0 MS | 252 KB | 1521 | 2023-11-04 09:30:52 |
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int mncc, maxn = 0; struct n { int left = 2, last = 0; char word[101]; }n[22]; int abcd(char a[], char b[]) { int al = strlen(a), bl = strlen(b), j; bool flag = true; for (int i = 1; i < al && i < bl; i++) { flag = true; for (j = 0; j < i; j++) if (a[al - i + j] != b[j]) { flag = false; break; } if (flag) return i; } return 0; } void dfs(char last[], int num) { maxn = max(maxn, num); int a; for (int i = 0; i < mncc; i++) if (n[i].left > 0) { a = abcd(last, n[i].word); if (a != 0) { n[i].left--; dfs(n[i].word, num + n[i].last - a); n[i].left++; } } } int main() { char start; cin >> mncc; for (int i = 0; i < mncc; i++) { cin >> n[i].word; n[i].last = strlen(n[i].word); } cin >> start; for (int i = 0; i < mncc; i++) if (n[i].word[0] == start) { n[i].left--; dfs(n[i].word, n[i].last); n[i].left++; } cout << maxn << endl; return 0; }