hdu 1671 Phone List(Trie树)
2015-07-27 18:23
330 查看
Problem Description
Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let’s say the phone catalogue listed these numbers:
1. Emergency 911
2. Alice 97 625 999
3. Bob 91 12 54 26
In this case, it’s not possible to call Bob, because the central would direct your call to the emergency line as soon as you had dialled the first three digits of Bob’s phone number. So this list would not be consistent.
Input
The first line of input gives a single integer, 1 <= t <= 40, the number of test cases. Each test case starts with n, the number of phone numbers, on a separate line, 1 <= n <= 10000. Then follows n lines with one unique phone number on each line. A phone number
is a sequence of at most ten digits.
Output
For each test case, output “YES” if the list is consistent, or “NO” otherwise.
Sample Input
Sample Output
学习Trie树的题
Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let’s say the phone catalogue listed these numbers:
1. Emergency 911
2. Alice 97 625 999
3. Bob 91 12 54 26
In this case, it’s not possible to call Bob, because the central would direct your call to the emergency line as soon as you had dialled the first three digits of Bob’s phone number. So this list would not be consistent.
Input
The first line of input gives a single integer, 1 <= t <= 40, the number of test cases. Each test case starts with n, the number of phone numbers, on a separate line, 1 <= n <= 10000. Then follows n lines with one unique phone number on each line. A phone number
is a sequence of at most ten digits.
Output
For each test case, output “YES” if the list is consistent, or “NO” otherwise.
Sample Input
2 3 911 97625999 91125426 5 113 12340 123440 12345 98346
Sample Output
NO YES
学习Trie树的题
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; typedef struct trie { int cnt; bool end; struct trie *next[26]; trie() { this->cnt=1; this->end=false; memset(next, 0, sizeof(next)); } }Trie; bool flag; void BuildTrie(char *s,Trie *&root) //建树 { Trie *p=root; Trie *q; int len=strlen(s); int j; int count=0; for (int i=0; i<len; i++) { j=s[i]-'0'; if(p->end) { flag=true; return; } if(!p->next[j]) { q=new Trie(); p->next[j]=q; } else { // p->next[j]->cnt++; count++; } p=p->next[j]; } p->end=true; //单词结束加标记 if(count==strlen(s)) //存在前缀 { flag=true; } } void DeleteTrie(Trie *&root) //释放空间 { for (int i=0; i<=9; i++) { if(root->next[i]) { DeleteTrie(root->next[i]); } } delete root; } int main() { int n,t; char s[20]; Trie *root; scanf("%d",&t); while (t--) { root=new Trie(); scanf("%d",&n); flag=false; while (n--) { scanf("%s",s); if(!flag) BuildTrie(s, root); } if(!flag) printf("YES\n"); else printf("NO\n"); DeleteTrie(root); } return 0; }
相关文章推荐
- C++读取Excel的XLS文件的方法
- 图片旋转,拖拽,缩放,删除一体
- 010--maven项目与myEclipse
- const在基本数据类型和指针类型中的用法小结
- 从join on和where执行顺序认识T-SQL查询处理执行顺序
- 树形DP入门总结
- 美团Android自动化之旅—适配渠道包
- jquery checkbox勾选/取消勾选的诡异问题
- Balanced Numbers(数位+状压)
- 线程池的创建以及使用
- class
- 名字的漂亮度
- JVM 进阶五
- IOS中的block的retain循环
- CPU大小端字节序的检测
- 树型dp入门小节
- 【php】Apache无法自动跳转却显示目录与php无法连接mysql数据库的解决方案
- linux硬链接与软链接
- Android Studio里面新建aidl出现的问题
- JavaScript调用客户端Java程序的方法