Ancinent Printer
一道字典树板子题:但是规律难找,答案就记录一下
字典树的节点数*2-最长字串+单词数
难点:
规律难找,想到字典树,就是找规律,规律还是打表找规律
AC代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1e5+5;
int tire[5*maxn][30];
char str[55];
int cnt,n;
void insert_str(char *str)
{
int root=0;
for(int i=0;i<strlen(str);i++)
{
int id=str[i]-'a';
if(!tire[root][id])
{
tire[root][id]=++cnt;
}
root=tire[root][id];
}
}
int main()
{
while(~scanf("%d",&n))
{
int maxx=0;
cnt=0;
memset(tire,0,sizeof(tire));
for(int i=0;i<n;i++)
{
scanf("%s",str);
insert_str(str);
int temp=strlen(str);
//printf("%d\n",temp);
maxx=max(maxx,temp);
}
int ans=cnt*2-maxx+n;
printf("%d\n",ans);
}
}