字典树——单词是否出现过/单词是否是字典书中单词的前缀
模板:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+5; int son[maxn][26]; int cnt; int vis[maxn]; char s[maxn]; void Insert(char *s) { int p=0; for(int i=0;s[i];i++) { int u=s[i]-'a'; if(!son[p][u])son[p][u]=++cnt; p=son[p][u]; } vis[p]++; } int query(char *s) { int p=0; for(int i=0;s[i];i++) { int u=s[i]-'a'; if(!son[p][u])return 0; p=son[p][u]; } return vis[p]; } int main() { int n; scanf("%d",&n); while(n--) { char op; cin>>op; scanf("%s",s); if(op=='I')Insert(s); else printf("%d\n",query(s)); } return 0; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+5; int son[maxn][26]; int cnt; int vis[maxn]; char s[maxn]; void Insert(char *s) { int p=0; for(int i=0;s[i];i++) { int u=s[i]-'a'; if(!son[p][u])son[p][u]=++cnt; p=son[p][u]; } vis[p]++; } int query(char *s) { int p=0; for(int i=0;s[i];i++) { int u=s[i]-'a'; if(!son[p][u])return 0; p=son[p][u]; } return 1; } int main() { int n; scanf("%d",&n); while(n--) { char op; cin>>op; scanf("%s",s); if(op=='I')Insert(s); else printf("%d\n",query(s)); } return 0; }