poj3630(简单tire)
Posted lmjer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj3630(简单tire)相关的知识,希望对你有一定的参考价值。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=100000+10; int trie[maxn][20]; char c[maxn][20]; int tot; bool endi[maxn*20]; void myinsert(char* st){ int len=strlen(st); int ch,p=1; for (int i=0;i<len;i++){ ch=st[i]-‘0‘+1; if(!trie[p][ch]) trie[p][ch]=++tot; p=trie[p][ch]; } endi[p]=true; } bool findi(char* st){ int len=strlen(st); int p=1; for (int i=0;i<len;i++){ p=trie[p][st[i]-‘0‘+1]; if(p==0) return true; if(endi[p]&&i!=len-1) return false; } return true; } int main(){ int t,n; bool ans; scanf("%d",&t); while(t--){ tot=1; memset(endi,0,sizeof(endi)); memset(trie,0,sizeof(trie)); memset(c,‘0‘,sizeof(c)); ans=true; scanf("%d",&n); for (int i=1;i<=n;i++){ scanf("%s",c[i]); myinsert(c[i]); } for (int i=1;i<=n;i++){ if(!findi(c[i])) { printf("NO\n"); ans=false; break; } } if(ans) printf("YES\n"); } return 0; }
以上是关于poj3630(简单tire)的主要内容,如果未能解决你的问题,请参考以下文章