hdu 1671 Phone List(数据结构:trie)
来源:互联网 发布:中教数据库怎么样 编辑:程序博客网 时间:2024/06/15 01:35
判断给出的所有号码中是否存在前缀树
思路是我们只需判断每个树中是否含有其他树,标记每个树的末尾为1
则如果某棵树的遍历过程标记大于1,说明含前缀树
之前用结构体封装写的,结果老是栈溢出,不用结构体就好了
代码如下:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define MAXN 10010#define LL long longusing namespace std;char str[MAXN][12];int ch[MAXN*10][30];int val[MAXN*10];int sz;int id(char c) { return c-'0';}void insert(char s[], int v) { int u = 0, n = strlen(s); for(int i=0; i<n; ++i) { int c = id(s[i]); if(!ch[u][c]) { val[sz] = 0; ch[u][c] = sz++; } u = ch[u][c]; } val[u] = v;}bool search(char s[]) { int u = 0, n = strlen(s); int cnt = 0; for(int i=0; i<n; ++i) { int c = id(s[i]); u = ch[u][c]; if(val[u]) ++cnt; } if(cnt > 1) { return true; } return false;}int main(void) { int T, n; scanf("%d", &T); while(T--) { sz = 1; memset(ch, 0, sizeof(ch)); memset(val, 0, sizeof(val)); scanf("%d", &n); for(int i=0; i<n; ++i) { scanf("%s", str[i]); insert(str[i], 1); } bool ok = false; for(int i=0; i<n; ++i) { if(search(str[i])) { ok = true; break; } } if(ok) printf("NO\n"); else printf("YES\n"); } return 0;}
0 0
- hdu 1671 Phone List(数据结构:trie)
- hdu 1671 Phone List(trie)
- HDU 1671 Phone List(Trie)
- hdu 1671 Phone List (Trie树,水题)
- hdu 1671 Phone List trie树
- HDU 1671 Phone List(字典树Trie)
- HDU 1671 Phone List Trie树
- Phone List - HDU 1671 Trie树
- HDU 1671 Phone List(字典树Trie)
- hdu-1671-Phone List Trie树
- HDU 1671 Phone List (Trie)
- hdu 1671 Phone List(Trie树)
- HDU 1671 Phone List trie树
- hdu 1671 Phone List Trie树
- HDU 1671 Phone List Trie Tree
- HDU 1671 Phone List(Trie树)
- HDU 1671 Phone List(字典树Trie)
- hdu 1671 phone list Trie 树
- 目标检测之harr特征
- POJ 1274 The Perfect Stall (网络流-最大流)
- android如何在BaseAdapter内使用notifyDataSetChanged()方法以及线程的使用
- jghdhfgdhfgdgfhdfghd
- 中小企业HR发问,人才都去哪儿了?
- hdu 1671 Phone List(数据结构:trie)
- 执行main函数之前要做的工作
- JS验证正则表达式(大全)
- 在 PowerShell 中使用 SQL Server
- python stmplib send mail
- mysql上排名sql的写法,类似oracle的rank和dense
- HDU 2586 - How far away ? (LCA)
- 宏定义与函数定义的小问题
- dom4j 创建 并 写入 xml文件