题意:

      给你一堆电话号,问你这些电话号后面有没有相互冲突的,冲突的条件是当前这个电话号是另一个电话号的前缀,比如有 123456789 123,那么这两个电话号就冲突了,直接输出NO。

思路:  

      说白了就是前缀匹配,也就是以当前字符串为前缀的字符串有几个,只要有一个或者更多那么就直接NO了,快速的判断前缀的问题我们可以直接字典树记录前缀,先把所有的字符串都存在字典里,然后在枚举每一个,只要有一个是前缀(不算自己)那么就直接NO了,这里要注意一点,每次都要把Tree的内存清空,不然不同的mallco不释放,测试数据多了就MLE了。


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char
str[10005][12]; typedef struct Tree
{

Tree *next[10];
int
v;
}
Tree; Tree root; void Buid_Tree(char *str)
{
int
len = strlen(str);
Tree *p = &root ,*q;
for(int
i = 0 ;i < len ;i ++)
{
int
id = str[i] - '0';
if(
p -> next[id] == NULL)
{

q = (Tree *) malloc(sizeof(root));
q -> v = 1;
for(int
j = 0 ;j < 10 ;j ++)
q -> next[j] = NULL;
p -> next[id] = q;
p = p -> next[id];
}
else
{

p = p -> next[id];
p -> v ++;
}
}
} int
Find(char *str)
{
int
len = strlen(str);
Tree *p = &root;
for(int
i = 0 ;i < len ;i ++)
{
int
id = str[i] - '0';
p = p -> next[id];
if(
p == NULL) return 0;
}
return
p -> v;
} bool
solve(int n)
{
for(int
i = 1 ;i <= n ;i ++)
if(
Find(str[i]) != 1) return 0;
return
1;
} int
dealTree(Tree* T)
{
int
i;
if(
T==NULL)
return
0;
for(
i=0;i<10;i++)
{
if(
T->next[i]!=NULL)
dealTree(T->next[i]);
}

free(T);
return
0;
} int main ()
{
int
t ,n ,i;
scanf("%d" ,&t);
while(
t--)
{

scanf("%d" ,&n);
for(
i = 0 ;i < 10 ;i ++)
root.next[i] = NULL;
for(
i = 1 ;i <= n ;i ++)
{

scanf("%s" ,str[i]);
Buid_Tree(str[i]);
}
if(
solve(n)) puts("YES");
else
puts("NO");
dealTree(&root);
}
return
0;
}

最新文章

  1. JAVA的内存模型(变量的同步)
  2. 架构师养成记--10.master-worker模式
  3. CentOS 6.5 Nginx 配置
  4. Unity3d之个性化皮肤
  5. Javascript高级程序设计——面向对象之创建对象
  6. Snort - manual 笔记(三)
  7. WebService之Axis2(4):二进制文件传输
  8. 关于fseek和文件&quot;ab+&quot;打开方式的问题
  9. 数组链表下标指针map list
  10. HDU 2955(01背包问题)
  11. HDU 1242——Rescue(优先队列)
  12. MySQL 触发器结构及三个案例demo
  13. C# devExpress GridControl 统计行总数
  14. Lavarel artisan 命令
  15. Forth-83 多任务解析
  16. 第二章 Java内存区域与内存溢出异常
  17. [nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享
  18. linux内核工作队列使用总结
  19. MyBatis中Mapper的返回值类型
  20. ubuntu 配置mycat

热门文章

  1. Nginx常用内核参数优化,安装,基本命令
  2. dubbo实战之一:准备和初体验
  3. 关于win10 编辑文件时权限不足问题
  4. 「NOIP模拟赛」Round 2
  5. 基础篇:java.security框架之签名、加密、摘要及证书
  6. 【java框架】MyBatis-Plus(1)--MyBatis-Plus快速上手开发及核心功能体验
  7. SpringBoot入门学习看这一篇就够了
  8. 分享一次排查CLOSE_WAIT过多的经验
  9. [hash]集合
  10. 附031.Kubernetes_v1.20.4高可用部署架构二