poj3630 简单Trie

来源:互联网 发布:windows 开发ios 编辑:程序博客网 时间:2024/06/10 13:39

突然想到一个很机智的做法,mark,插入的时候直接返回最后一个的sz,然后插入完之后判断一下就好啦、

//  Created by Chenhongwei in 2015.//  Copyright (c) 2015 Chenhongwei. All rights reserved.#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <climits>#include <queue>#include <cmath>#include <map>#include <set>#include <stack>#include <vector>#include <sstream>#include <algorithm>using namespace std;const int inf=1e9;const int maxn=1e5+100;typedef long long ll;typedef unsigned long long ull;int ch[100100][10];int v[10010],sz,n;char s[10010][15];int insert(int x){int u=0,len=strlen(s[x]);for(int i=0;i<len;i++){int c=s[x][i]-'0';if(!ch[u][c]){memset(ch[sz],0,sizeof ch[sz]);ch[u][c]=sz++;}u=ch[u][c];}return u;}int main(){//ios::sync_with_stdio(false);// freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int T;scanf("%d",&T);while(T--){sz=1;memset(ch,0,sizeof ch);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",s[i]);v[i]=insert(i);}bool ok=0;for(int i=1;i<=n;i++)for(int j=0;j<=9;j++)if(ch[v[i]][j]){ok=1;break;}if(ok)printf("NO\n");elseprintf("YES\n");}return 0;}



0 0