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; }
愿你出走半生,归来仍是少年