hdu1671 字典树记录前缀出现次数
2024-10-21 06:24:18
题意:
给你一堆电话号,问你这些电话号后面有没有相互冲突的,冲突的条件是当前这个电话号是另一个电话号的前缀,比如有 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;
}
最新文章
- JAVA的内存模型(变量的同步)
- 架构师养成记--10.master-worker模式
- CentOS 6.5 Nginx 配置
- Unity3d之个性化皮肤
- Javascript高级程序设计——面向对象之创建对象
- Snort - manual 笔记(三)
- WebService之Axis2(4):二进制文件传输
- 关于fseek和文件";ab+";打开方式的问题
- 数组链表下标指针map list
- HDU 2955(01背包问题)
- HDU 1242——Rescue(优先队列)
- MySQL 触发器结构及三个案例demo
- C# devExpress GridControl 统计行总数
- Lavarel artisan 命令
- Forth-83 多任务解析
- 第二章 Java内存区域与内存溢出异常
- [nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享
- linux内核工作队列使用总结
- MyBatis中Mapper的返回值类型
- ubuntu 配置mycat
热门文章
- Nginx常用内核参数优化,安装,基本命令
- dubbo实战之一:准备和初体验
- 关于win10 编辑文件时权限不足问题
- 「NOIP模拟赛」Round 2
- 基础篇:java.security框架之签名、加密、摘要及证书
- 【java框架】MyBatis-Plus(1)--MyBatis-Plus快速上手开发及核心功能体验
- SpringBoot入门学习看这一篇就够了
- 分享一次排查CLOSE_WAIT过多的经验
- [hash]集合
- 附031.Kubernetes_v1.20.4高可用部署架构二