字典树模板题,没有用链式存储,用的数组(提交一直re,都没发现是数组类型写错了,不如自己写一遍)
#include <bits/stdc++.h> using namespace std; int trie[1000010][26]; int num[1000010]={0}; int pos = 1; void Insert(char a[]) { int c=0; for(int i=0;a[i];i++){ int n=a[i]-'a'; if(trie[c][n]==0){ trie[c][n]=pos++; } c=trie[c][n]; num[c]++; } return ; } int Find(char a[]) { int c=0; for(int i=0;a[i];i++){ int n=a[i]-'a'; if(trie[c][n]==0){ return 0; } c=trie[c][n]; } return num[c]; } int main() { char a[11]; while(gets(a)){ if(a[0]==NULL) break; Insert(a); } while(gets(a)){ printf("%d ",Find(a)); } return 0; } /* banana band bee absolute acm ba b band abc */