poj2945 字典树题目

来源:互联网 发布:js中数字转化成字符串 编辑:程序博客网 时间:2024/05/18 07:41
判断相同字符的个数
#include<stdio.h>#include<string.h>#define max 510010struct node{    int len;    int ju;    struct node *next[26];} Node,Root[max];int sum=0;int num[max];void BuildTree(char *word){    node *root=&Node;    while(*word)    {        if(root->next[*word-'A']==NULL)        {            Root[sum].len=0;            root->next[*word-'A']=&Root[sum++];        }        root=root->next[*word-'A'];        word++;    }    root->len++;}int SearchTree(char *word){    node *root=&Node;    while(*word&&root)    {        root=root->next[*word-'A'];        word++;    }    int tem1=root->len;    root->len=-1;    return tem1;}int main(){    char cha[20100][30];    int n,m;    int check;    while(scanf("%d%d",&n,&m)!=EOF)    {        memset(Node.next,0,sizeof(Node.next));        memset(Root->next,0,sizeof(Root->next));        memset(Root,0,sizeof(Root));        if(n==m&&n==0) break;        memset(cha,'0',sizeof(cha));        memset(num,0,sizeof(num));        sum=0;        for(int i=1; i<=n; i++)        {            scanf("%s",cha[i]) ;            BuildTree(cha[i]);        }        for(int j=1; j<=n; j++)        {            check=SearchTree(cha[j]);            if(check==-1)                continue;            num[check]++;        }        for(int i=1; i<=n; i++)        {            printf("%d\n",num[i]);        }    }    return 0;}

原创粉丝点击