hdu 1671 Phone List(给定n个电话号码串,问这n个电话号码串中是否存在某一串是其它串的前缀,如果存在输出NO,否则YES)
2015-08-11 21:35
399 查看
1.动态申请的内存用完以后要释放,否则超内存。
2.代码:
2.代码:
#include<cstdio> #include<cstring> #include<stdlib.h> using namespace std; struct Node { int cnt; Node *next[10]; void init() { cnt=0; for(int i=0;i<10;i++) { next[i]=NULL; } } }; Node *p_root; int n; void Insert(char s[]) { int len=strlen(s); Node *p=p_root; for(int i=0;i<len;i++) { int num=s[i]-'0'; if(p->next[num]==NULL) { p->next[num]=(Node *)malloc(sizeof(Node)); (*p->next[num]).init(); } p=p->next[num]; p->cnt++; } } int Search(char s[]) { int len=strlen(s); Node *p=p_root; for(int i=0;i<len;i++) { int num=s[i]-'0'; p=p->next[num]; } return p->cnt; } void Destroy(Node *p) { for(int i=0;i<10;i++) { if(p->next[i]!=NULL) { Destroy(p->next[i]); } } free(p); } int main() { int t; scanf("%d",&t); char s[10005][15]; while(t--) { p_root=(Node *)malloc(sizeof(Node)); (*p_root).init(); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",s[i]); Insert(s[i]); } int flag=0; for(int i=0;i<n;i++) { if(Search(s[i])>=2) { flag=1; break; } } if(flag) printf("NO\n"); else printf("YES\n"); Destroy(p_root); } return 0; }
相关文章推荐
- NOIP2011-普及组复赛模拟试题-第一题-NBA总冠军
- 【C语言】32位,64位机器sizeof区别
- 【机器学习系列】机器学习界大牛林达华推荐的书籍
- 黑马程序员——封装
- @property的用法
- hdu 2001 计算两点间的距离
- MyBatis -- sql映射文件详解
- HDU 4593 H - Robot 水题
- 【bzoj1208】[HNOI2004]宠物收养所
- Lotto
- hdoj 1875 畅通工程再续 【最小生成树】
- Eclipse连接天天模拟器进行调试
- 田忌赛马
- 1007 奥运排序问题
- APK防反编译技术
- 模板方法模式的房间改造-组合查询
- 微信系列——关闭微信企业号应用
- 谈谈多线程
- JUnit单元测试
- 文件大小转换