HDU 1251 统计难题

字典树又一基本题

 

代码:

#include <iostream>

#include <cstdio>

#include <cstring>

#include <cmath>

#include <algorithm>

using namespace std;

#define N 1027



struct node

{

    int count;

    node *next[30];

}*root;



char ss[13];



node *create()

{

    node *p;

    p = (node *)malloc(sizeof(node));

    p->count = 1;

    for(int i=0;i<26;i++)

        p->next[i] = NULL;

    return p;

}



void release(node *p)

{

    for(int i=0;i<26;i++)

    {

        if(p->next[i] != NULL)

            release(p->next[i]);

    }

    free(p);

}



void insert(char *ss)

{

    int i=0,k;

    node *p = root;

    while(ss[i])

    {

        k = ss[i++] - 'a';

        if(p->next[k] == NULL)

            p->next[k] = create();

        else

            p->next[k]->count++;

        p = p->next[k];

    }

}



int search(char *ss)

{

    int i=0,k,j;

    node *p = root;

    int now = 0;

    while(ss[i])

    {

        k = ss[i++] - 'a';

        p = p->next[k];

        if(p == NULL)

            return 0;

        else

            now = p->count;

    }

    return now;

}



int main()

{

    int i=0,j,k;

    root = create();

    while(gets(ss)&&ss[0]!='\0')

    {

        insert(ss);

    }

    i=0;

    while(scanf("%s",ss)!=EOF)

    {

        printf("%d\n",search(ss));

    }

    release(root);

    return 0;

}
View Code

 

你可能感兴趣的:(HDU)