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

浙公网安备 33010602011771号