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
",find(s));
    return 0;
}

原文地址:https://www.cnblogs.com/forever97/p/3559382.html