poj2630Phone List(静态Trie tree)
来源:互联网 发布:pc蛋蛋预测php源码 编辑:程序博客网 时间:2024/06/05 18:14
->题目请戳这里<-
这题跟杭电1671一样,->详情请戳这里<-
于是用1671的代码去提交了一发,结果TLE了。果断写成静态树,效率笋尖就上去了,从TLE到125ms,就是这么快!
这个代码拿到杭电上重新提交一遍,效率也高出不少。从400+ms到93ms,果然静态数据结构效率高。这题与1671比还改进了一点,就是去掉了排序,在每个节点处加了一个变量tag,表示某条路径存在,end标记一个单词的结尾,这样我们就不用排序,就可以判断2个单词是否有相同前缀了。无非分2种情况:
1:某个单词到了结尾,发现该节点的tag为1,表示前面插入的某个单词已经走过这条路了,即本单词是该单词的前缀,否定之;
2:某个单词在插入的路径上发现某节点是另一个单词的结尾,则这2个单词有共同前缀,否定之。
废话不多说,上代码:
#include <iostream>#include<cstdio>#include<cstring>using namespace std;struct node{ int next[10]; int end,tag;}lcm[1<<16];int pos,n;int flag;char s[11];void init(int i){ memset(lcm[i].next,0,sizeof(lcm[i].next)); lcm[i].end = lcm[i].tag = 0;}void build(int t,int id){ lcm[t].tag = 1; if(lcm[t].end == 1) flag = 1; if(flag) return; if(lcm[t].next[s[id] - '0'] == 0) { lcm[t].next[s[id] - '0'] = pos; init(pos); pos ++; } if(s[id + 1] == '\0') { if(lcm[lcm[t].next[s[id] - '0']].tag == 1) flag = 1; lcm[lcm[t].next[s[id] - '0']].end = 1; return; } else build(lcm[t].next[s[id] - '0'],id + 1);}int main(){ int i,t; scanf("%d",&t); while(t --) { scanf("%d",&n); pos = 1; init(0); flag = 0; //memset(lcm,0,sizeof(lcm)); for(i = 0;i < n;i ++) { scanf("%s",s); s[strlen(s)] = '\0'; build(0,0); } if(flag) printf("NO\n"); else printf("YES\n"); } return 0;}//2780K125MS/*10212312211221213112123312131431213123391197625999911254265113123401234401234598346*/
- poj2630Phone List(静态Trie tree)
- hdu1671Phone List(Trie tree)
- (静态trie) Phone List (P3630)
- HDU 1671 Phone List Trie Tree
- POJ3630 Phone List 静态Trie || Qsort
- Trie Tree
- trie tree
- Trie-tree
- Trie Tree
- trie tree
- trie tree
- Trie tree
- ZOJ2876 POJ3630 HDU1671 Phone List,静态Trie树
- POJ 3630 Phone List(Trie树,静态数组实现)
- Trie Tree(Prefix Tree)
- trie tree实验
- 字典树(trie tree)
- KNOW: Tree, Trie, Graph
- zoj 1108 FatMouse's Speed
- Visual Studio 2010 编译 MongoDB C++ Client Driver(看这里,终于解决了编译问题,谢谢大神的分享)
- web.xml配置文件概述
- Android ListView 正在加载 异步载入数据 CursorLoader 例子
- JNI学习系列(二)
- poj2630Phone List(静态Trie tree)
- Android无线调试——抛开USB数据线
- POJ 1004
- 珠海高新区唐家湾镇计生办事程序
- dhtmlx tree在IE9下不显示的问题
- USB设备名字
- HDU3001——Travelling(状态压缩DP)
- c# 委托和委托事件
- QT资源机制的使用