hdu 3460 Ancient Printer

字典树没有清空wrong了一次

假设最后所有的字符都要删除,则每个字符至少被删除一次,被打进一次,还有n次的打印

现在最后可以剩下一个字符串,则应该剩下最长的那串,可以减少最多的删除操作

View Code
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char s[55];
int ans;
class trie{
public :
trie* child[27];
trie()
{
memset(child,0,sizeof(child));
}
}root;
void insert(char *s)
{
class trie *cur=&root;
int len=strlen(s);
for(int i=0;i<len;i++)
{
int id=s[i]-'a';
if(!cur->child[id])
{
ans++;
cur->child[id]=new trie;
}
cur=cur->child[id];
}
}

void init(trie* T)
{
int i;
for(i=0;i<26;i++)
{
if(T->child[i])
init(T->child[i]);
}
for(i=0;i<26;i++)
T->child[i]=0;
}

int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
class trie* cur=&root;
init(cur);
ans=0;
int max=0;
for(i=1;i<=n;i++)
{
scanf("%s",s);
insert(s);
int len=strlen(s);
if(len>max) max=len;
}
printf("%d\n",2*ans-max+n);
}
return 0;
}



posted @ 2012-01-11 19:25  Because Of You  Views(292)  Comments(0Edit  收藏  举报