您的位置:首页 > 其它

HDU 1800(字典树)

2008-09-01 11:26 155 查看
简单的字典树水题,统计为单词前缀的单词数,取最大,注意要去前0,具体原理还是自己想想吧,最大数决定了最大分组。

诶 PKU月赛之后 我发现我只会水的 ..............

#include<iostream>

#include <queue>

using namespace std;

struct node

{

long num;

int next[10];

void init(){memset(next,-1,sizeof(next));num=0;}

}s[200000];

int p;

char a[100];

inline void preprocess(){s[p=0].init();}

long lmax;

inline void insert()

{

int index=0;

// ++s[index].num;

bool begin=false;

for(int i=0;a[i]!='\0';++i)

{

if (a[i]!='0')

{

begin=true;

}

if (!begin)

{

continue;

}

int x=a[i]-'0';

if(s[index].next[x]==-1)

{

s[++p].init();

s[index].next[x]=p;

}

index=s[index].next[x];

}

s[index].num++;

if (s[index].num>lmax)

{

lmax=s[index].num;

}

}

int main()

{

long n;

while (scanf("%ld",&n)!=EOF)

{

lmax=0;

getchar();

preprocess();

long i;

for (i=0;i<n;++i)

{

gets(a);

insert();

}

printf("%ld\n",lmax);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: