这也能AC?建议加强数据
  • 板块P1481 魔族密码
  • 楼主Qi_jB
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/22 23:46
  • 上次更新2024/1/23 10:27:59
查看原帖
这也能AC?建议加强数据
1226563
Qi_jB楼主2024/1/22 23:46
#include<iostream>
#include<algorithm>

using namespace std;

const int N = 200005;
int tree[N][26];
int h[26],cnt[N];
int idx=0,n;
char word[75];

void insert(char word[])
{
	int p = 0;
	int q=word[0]-'a';
	int num=0;
	for(int i = 0 ; word[i];i++)
	{
		int u = word[i]-'a';
		if (!tree[p][u]) tree[p][u]=++idx;
		if(cnt[p]>0) num++;
		p=tree[p][u];
	}
	cnt[p]++;
	h[q]=max(h[q],num+1);
}
int main()
{
	cin >> n;
	while(n --)
	{
		scanf("%s",word);
		insert(word);
	}
	sort(h,h+26);
	printf("%d",h[25]);
	
	
	
	return 0;
}

建议加强数据,我这样做法都能AC,我的做法是按输入顺序将字符串按trie树存进去,并另外开一个数组cnt计数,即在字符串的末尾做个标记,每次遍历按照数的顺序往下走,每遇到一个字符串结尾,那以单词‘。。。。’开头的路径最长链++。 如果说数据中前面是长的字符串,后面是短的,那我这样做法AC不了,还得做些另外的处理。

2024/1/22 23:46
加载中...