poj 3630 发表于 2017-01-18 | 分类于 ~❤程序❤~ , 字符串 , Trie树 Trie树模板题目(包含正常模板) 题目链接:poj 3630 题意:给定若干字符串,判断是否存在一个字符串是另一个字符串的前缀。 题解:水题直接上 Trie 树。 我思故我在:记着清空数组!123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>#include<vector>using namespace std;int love=0;char ap[30];int map[100100][11];bool ac[100100];bool work(int x){ int now=0; for(int i=1;i<=x;i++) { int y=ap[i]-'0'; if(map[now][y]!=0) { if(ac[map[now][y]]) return true; else now=map[now][y]; } else { map[now][y]=++love; now=map[now][y]; } } ac[now]=1; for(int i=0;i<=10;i++) { if(map[now][i]!=0) return true; } return false;}int main(){ int t; scanf("%d",&t); while(t--) { int n; bool flag=0; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%s",ap+1); if(work(strlen(ap+1))) flag=1; } if(flag) puts("NO"); else puts("YES"); memset(ac,0,sizeof(ac)); memset(map,0,sizeof(map)); love=0; } return 0;}