HDU 1251 统计难题

字典树~

#include <cstdio> 

#include <cstring>

using namespace std;

int cnt,n;

char s[12];

struct Node{int sum; int son[26];}trie[500000];

void insert(char *s){

    for(int l=strlen(s),x=0,i=0;i<l;i++){

        if(!trie[x].son[s[i]-'a'])trie[x].son[s[i]-'a']=++cnt;

        x=trie[x].son[s[i]-'a'];

        trie[x].sum++;

    }

}

int find(char *s){

    for(int l=strlen(s),x=0,i=0;i<l;i++){

        if(!trie[x].son[s[i]-'a'])return 0;

        x=trie[x].son[s[i]-'a'];

        if(i==l-1)return trie[x].sum;

    }

}

int main(){

    while(gets(s)){

        if(strlen(s)==0)break;

        insert(s);

    }

    while(gets(s))printf("%d\n",find(s));

    return 0;

}



你可能感兴趣的:(HDU)