博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ3630Phone List(字典树)
阅读量:5946 次
发布时间:2019-06-19

本文共 1497 字,大约阅读时间需要 4 分钟。

参考http://s.acmore.net/show_article/show/58

以附上代码

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 using namespace std;12 #define Max(a,b) (a > b ? a : b)13 #define Min(a,b) (a < b ? a : b)14 15 int Trie[500000][10];16 int val[100000];17 int S = 1;18 int idx(char c) { return c - '0';}19 20 void init()21 {22 S = 1;23 memset(Trie,0,sizeof(Trie));24 memset(val,-1,sizeof(val));25 }26 27 int search_insert(char* s)28 {29 int u = 0;30 int n = strlen(s);31 for(int i = 0; i < n; i++)32 {33 int c = idx(s[i]);34 if(!Trie[u][c])35 { //这个结点不存在,插入36 Trie[u][c] = S;37 val[u] = 0;//标记这个结点是单词结点38 u = S;39 S++;//结点加140 }41 else if(Trie[u][c] && val[u] == 0)42 { //如果这个结点存在,而且是单词结点,那么就往下走43 u = Trie[u][c];44 if(val[u] == 1)45 { //当下一个结点是单词的结束时,直接返回false,表示存在前缀。46 return 0;47 }48 }49 else if(val[u] == 1)50 {51 return 0;52 }53 }54 if(val[u] == 1 || val[u] == 0)55 { //检测是不是有前缀56 return 0;57 }58 else59 { //设置新单词的结尾标记60 val[u] = 1;61 }62 return 1;63 }64 65 int main()66 {67 //freopen("in.txt","r",stdin);68 int t,n;69 char a[100000];70 scanf("%d",&t);71 while(t--)72 {73 int flag = 1;74 init();75 scanf("%d",&n);76 while(n--)77 {78 scanf("%s",a);79 if(!search_insert(a))80 {81 flag = 0;82 }83 }84 if(flag)85 {86 printf("YES\n");87 }88 else89 {90 printf("NO\n");91 }92 }93 return 0;94 }

 

转载于:https://www.cnblogs.com/gj-Acit/p/3145042.html

你可能感兴趣的文章
dubbo提供者出现不明外网ip注册的问题
查看>>
Mac版本UltraEdit取消自动更新检查
查看>>
HashMap之Hash碰撞冲突解决方案及未来改进
查看>>
OpenCV3 - 形态转换
查看>>
RTP
查看>>
C#调用java写的WebService
查看>>
常用对照表
查看>>
1046 Shortest Distance
查看>>
富文本编辑器UEditor提交时获取所有上传的文件
查看>>
CI3中添加自己的library,并且使用CI的特性
查看>>
CStdioFile::Seek
查看>>
Android内核开发:学会分析系统的启动log
查看>>
sshpass+expect解决交互式问题
查看>>
在kivy中使用模板
查看>>
poj 1742 roads
查看>>
笔记:学习JavaWeb开发第二课
查看>>
Go实现FastCgi Proxy Client 系列(一)
查看>>
不能用array === null 来判断数组为空!!!
查看>>
关于对象的存在和销毁
查看>>
如何移动CleanMyMac激活码到另一台Mac上
查看>>