zoj 2876 Phone List(tire 树)
来源:互联网 发布:mysql如何创建存储过程 编辑:程序博客网 时间:2024/06/05 17:24
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:
- Emergency 911- Alice 97 625 999- Bob 91 12 54 26In 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 withn, the number of phone numbers, on a separate line, 1 <= n <= 10000.Then followsn 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
#include <iostream>#include <cstdio>#include <cmath>#include <cstdlib>#include <cstring>#define N 10using namespace std;struct trie{ struct trie *next[N]; bool isword; int num;}*head;char temp[100];int flag=0;struct trie* hiti(){ struct trie* node = (struct trie *)malloc(sizeof(struct trie)); node->num = 0; node->isword = false; memset(node->next , 0 , sizeof(node->next)); return node;}void great_tree(char *a){ struct trie *p = head,*q = NULL; int len = strlen(a); for(int i=0;i<len;i++) { int id = a[i]-'0'; if(p->next[id]==NULL) { q = new (struct trie); for(int j=0;j<N;j++) q->next[j] = NULL; q->isword = 0; q->num = 0; p->next[id] = q; } if(p->next[id]->isword) flag = 1; if(i==len-1) { p->next[id]->isword = 1; } p = p->next[id]; } for(int i=0;i<N;i++) if(p->next[i]!=NULL) flag = 1;}void del(struct trie *head){ for(int i=0;i<N;i++) { if(head->next[i]!=NULL) del(head->next[i]); } delete head;}int find_tree(char a[]){ struct trie *p = head; int len = strlen(a); for(int i=0;i<len;i++) { int id = a[i]-'0'; // if(p->next[id]==NULL) // return -1; p = p->next[id]; } if(p->isword) return p->num;}int main(){ int Case,n; cin >> Case; getchar(); while(Case--) { cin >> n ; getchar(); flag = 0; head = hiti(); for(int i=0;i<n;i++) { gets(temp); great_tree(temp); } if(!flag) cout << "YES" << endl; else cout << "NO" << endl; del(head); } return 0;}
0 0
- zoj 2876 Phone List(tire 树)
- Phone List(HDOJ-1671)(tire树)
- HDU1671 POJ3630 Phone List Tire树
- HDU 1671 Phone List(tire树)
- poj 4089 Phone List(tire树)
- zoj 2876 Phone List
- zoj 2876 Phone List
- zoj 2876 Phone List【字典树】【水】
- ZOJ 2876 Phone List(trie树)
- HDU 1671 Phone list (Tire tree)
- poj 3630 || zoj 2876 ||hdu 1671 Phone List (Trie树的应用)
- ZOJ Problem Set - 2876 Phone List
- ZOJ-1875-Phone List-字典树
- hdu 1671|| zoj 2876 phone list(trie 水)
- Phone List(trie树)
- 利用tire tree 寻找是否存在某个数是另外一个数的前缀(Phone List)
- hdu2846 Repository(Tire树)
- tire树~!
- 对HashMap迭代的理解
- Spring源码由浅入深系列一 简介
- 双向、循环链表
- leetcode--single number.
- NGUI v3.6.8 (Jul 13, 2014)与旧版相比的变化
- zoj 2876 Phone List(tire 树)
- TCP/IP报文格式
- 第四十天 一乐在其中—Android的小游戏打飞机(四)添加敌机
- hadoop2.4.1 spark1.0.1编译
- Hardwood Species
- com技术内幕学习备忘录
- OpenCV坐标体系的初步认识
- Ubuntu 14.04 单机版 Hadoop2.2.0+hbase0.96.2 安装练习
- 菜鸟的安卓实习之路---- android的广播(1)