题目大意:给出N个单词,每个单词打完需要加一个printf键,问最少要按几次键盘。
思路:一个思路题,ans=单词数+(字典树节点数*2)-最长的单词长度
#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"iostream"
using namespace std;
int sum;
struct trie
{
trie *next[27];
};
trie *root;
void init(char *v)
{
int i;
trie *p=root,*q;
for(i=0;v[i];i++)
{
int k=v[i]-'a';
if(p->next[k]==NULL)
{
q=(trie *)malloc(sizeof(trie));
for(int j=0;j<26;j++) q->next[j]=NULL;
p->next[k]=q;
sum++;
}
p=p->next[k];
}
}
int main()
{
int n;
while(scanf("%d",&n)!=-1)
{
int ans=0;
int maxx=0;
sum=0;
ans+=n;
root=(trie *)malloc(sizeof(trie));
for(int j=0;j<26;j++) root->next[j]=NULL;
while(n--)
{
char v[55];
scanf("%s",v);
int len=strlen(v);
if(len>maxx) maxx=len;
init(v);
}
printf("%d\n",ans+=sum*2-maxx);
}
}