提交时间:2024-03-26 16:18:03

运行 ID: 139875

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