Phone List

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

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
2
3
911
97625999
91125426
5
113
12340
123440
12345
98346
 
Sample Output
NO
YES
 
 
思路:经典字典树(Trie)应用,只不过这题一开始做的时候是WA的,因为自己默认号码输入顺序是按照长度递增的。。。。后来才发现。。。

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=; struct node{
int m;
int v;
node *next[];
node()
{
for(int i=;i<;i++)
next[i]=NULL;
m=;
}
}; node *root;
int n;
bool flag; void insert_tree(char* str)
{
int len=strlen(str);
if(root==NULL)
root=new node;
node *p=root,*q;
for(int i=;i<len;i++)
{
if(p->m==)
{
flag=true;
return; //the end
}
int id=str[i]-'';
if(p->next[id]==NULL)
{
q=new node;
p->next[id]=q;
p=p->next[id];
}
else
{
p=p->next[id];
if(i==len-)
{
flag=true;
return; //the end;
}
}
if(i==len-)
{
p->m=;
}
}
} void del_tree(node* rt)
{
for(int i=;i<;i++)
{
if(rt->next[i]!=NULL)
del_tree(rt->next[i]);
}
delete rt;
} int main()
{
int t;
char str[maxn];
scanf("%d",&t);
while(t--)
{
flag=false;
root=NULL;
scanf("%d",&n);
while(n--)
{
scanf("%s",str);
if(flag)
continue;
else
insert_tree(str);
}
if(flag)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
del_tree(root);
}
return ;
}
 
代码:
 

最新文章

  1. &lt;head&gt;&lt;/head&gt;
  2. 《Photon》
  3. 基本概率分布Basic Concept of Probability Distributions 1: Binomial Distribution
  4. 主动模式下FTP的详细工作过程(转) 挺详细
  5. C++ 类里面,函数占用存储空间问题
  6. Linux基本操作命令总结
  7. 使用opencv统计视频库的总时长
  8. iOS UIKit:viewController之Present (3)
  9. matlab-----均值滤波函数的实现
  10. 使用httpwatch抓包
  11. mysql在linux上的一点操作
  12. jsp提交表单问题
  13. Angular4 后台管理系统搭建(10) - 做一个通用的可跨域上传文件的组件
  14. Java基础学习(1)——反射
  15. Unity3D学习(二):使用JSON进行对象数据的存储读取
  16. Centos发布java的war包后,无法访问发布的工程
  17. 封装自定义服务$http
  18. Windows 10,鼠标右键-发送到-桌面快捷方式缺失解决方法
  19. python3.5+selenium3环境搭建
  20. python六十六课——单元测试(二)

热门文章

  1. 51nod——1640 天气晴朗的魔法 有边权限制的最大生成树
  2. 【线性基 集合hash】uoj#138. 【UER #3】开学前的涂鸦
  3. 极路由安装SS,SSR,搬运,侵权删除
  4. 学习python第二天 流程判断
  5. Postgres安装详解
  6. sql中保留一位小数的百分比字符串拼接,替换函数,换行符使用
  7. error LNK2001: unresolved external symbol __imp___time64
  8. Android开发环境安装经验
  9. ios开发第一步--虚拟机安装MAC OS X
  10. C++文件读写之对象的读写