提交时间:2023-11-04 09:30:52

运行 ID: 108721

#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; }