提交时间:2023-11-04 09:25:48

运行 ID: 108713

#include <bits/stdc++.h> using namespace std; int n, vis[100005], ans, maxn, l[100005], p; string s[10001]; char ch; int find(int x, int y) { int lx = l[x]; int ly = l[y]; for(int i = lx - 1; i >= 1; i--) { if(s[x][i] == s[y][0]) { int k = 0; for(int j = i + 1; j <= lx - 1; j++) { k++; if(s[x][j] != s[y][k]) { return 0; } } return ly - (k + 1); } } return 0; } void find1(int x) { for(int i = 1; i <= n; i++) { if(vis[i] < 2 && find(x, i)) { vis[i]++; ans += find(x, i); find1(i); vis[i]--; ans -= find(x, i); } } if(ans > p) { p = ans; } } int main() { cin >> n; for(int i = 1; i <= n; i++) { cin>>s[i]; l[i] = s[i].length(); } cin >> ch; for(int i = 1; i <= n; i++) { if(s[i][0] == ch) { ans = l[i]; vis[i]++; find1(i); vis[i]--; if(p > maxn) { maxn = p; } } } cout << maxn; return 0; }