56求助
查看原帖
56求助
718017
Dream__maker楼主2024/9/10 20:23
#include <bits/stdc++.h>
using namespace std;
const int N = 3e6 + 10;
int n, cnt, ans = 1;
int nxt[N][30], sum[N], a;
char s[N];
vector <int> e[N];
int dp(int x)
{
	int res = sum[x];
	for(int i = 0; i < e[x].size(); i ++)
	{
		int y = e[x][i];
		res += dp(y);
	}
	ans = max(ans, res);
	if(!sum[x]) return 0;
	else return res;
}
int main()
{
	cin >> n;
	for(int i = 1; i <= n; i ++)
	{
		scanf("%s", s);
		int ls = strlen(s), u = 0;
		for(int i = ls - 1; i >= 0; i --)
		{
			int c = s[i] - 'a';
			if(!nxt[u][c]) 
			{
				nxt[u][c] = ++ cnt;
				e[u].push_back(cnt);
			}
			u = nxt[u][c];
		}
		sum[u] ++;
	}
	a = dp(0);
	cout << ans << endl;
	return 0;
}
2024/9/10 20:23
加载中...