poj 3630 简单Trie树的应用
学了Trie树(学习Trie树相关的内容,猛搓这!),来做这题,感觉挺简单的,边输入边判断是否存在是否有前缀(prefix),这样的话要考虑两种情况,一种是前面的某个串是该串的前缀,或者该串是前面某个串的前缀。 写完,提交,TLE!!原来不能用动态建树的方法,必须用静态树! 后来再提交,WA。。。哎。纠结死我了。跟别人的对比了下,觉得自己的也没错啊...真不知道错在哪了。下面贴出代码,求大牛指导! 最后看了discuss里面前辈给出的程序,把自己的改了下,是先排序,然后再Insert,这样可以少考虑一种情况。然后再把静态树的数组开大点,不然还是会WA的!最后终于AC了。
AC代码:
#include <iostream> #include <fstream> #include <algorithm>using namespace std;char str[10001][11]; const int sunnum=10,base='0';struct Trie{bool terminal;//int num;Trie *sun[sunnum]; }node[1000000];struct Phone{char num[11];int len;friend bool operator<(const Phone &a,const Phone &b){return a.len<b.len;} }p[10001];int x=0; bool result;Trie *NewTrie() {Trie* temp=node+x++;for(int i=0; i<10; i++){temp->sun[i]=NULL;}temp->terminal=false;return temp; }void Insert(Trie *root,Phone cur) {Trie *temp=root;for(int i=0; i<cur.len; i++){ int k=cur.num[i]-base;if(temp->sun[k]==NULL) temp->sun[k]=NewTrie();else{if(temp->sun[k]->terminal==true) //排序后只需处理这一种情况 即前面的串是后面的串的prefix {//return true;result=false;}}temp=temp->sun[k];}temp->terminal=true; }int main() {int t,n,i;freopen("acm.txt","r",stdin);scanf("%d",&t);while(t--){Trie *root=NewTrie();scanf("%d",&n);for(i=0; i<n; i++){scanf("%s",p[i].num);p[i].len=strlen(p[i].num);}sort(p,p+n); //先排序result=true;for(i=0; i<n; i++){Insert(root,p[i]);}if(result) printf("YES\n");else printf("NO\n");} return 0; }
我纠结了好久,但总是WA的代码。求大神指导!他们说的这组数据我也测试通过了。有没有其他的数据来测试呢?
2
2
1
12
2
12
1
#include <iostream> #include <fstream> #include <algorithm>using namespace std;char str[10001][11]; const int sunnum=10,base='0';struct Trie{bool terminal;//int num;Trie *sun[sunnum]; }node[1000000];int x=0; bool result;Trie *NewTrie() {Trie* temp=node+x++;for(int i=0; i<10; i++){temp->sun[i]=NULL;}temp->terminal=false;return temp; }bool Insert(Trie *root,char*s) {Trie *temp=root;while(*s){int k=*s-base;if(*(s+1)=='\0' && temp->sun[k]!=NULL) //该串是前面某个串的前缀 {return true;}if(temp->sun[k]==NULL) temp->sun[k]=NewTrie();else{//temp->sun[*s-base]->num++;if(temp->sun[k]->terminal==true) //别的字符串是该字符串的前缀 {return true;}}temp=temp->sun[k];s++;}temp->terminal=true; return false; }int main() {int t,n,i;freopen("acm.txt","r",stdin);scanf("%d",&t);while(t--){Trie *root=NewTrie();scanf("%d",&n);for(i=0; i<n; i++){scanf("%s",str[i]);if(Insert(root,str[i])){printf("NO\n");break;}}if(i==n)printf("YES\n");} return 0; }
转载于:https://www.cnblogs.com/Jason-Damon/archive/2012/04/15/2450850.html
poj 3630 简单Trie树的应用相关推荐
- POJ3630——简单Trie树
这个题的意思是说,给出一些字符串,判断是否有字符串是另一个字符串的前缀,当然可以用排序水过,不过这个题拿来练习一下Trie树不错. 这个题在poj的discuss上好多人说必须要静态建树,估计都是用了 ...
- Phone List POJ - 3630(字典树模板题)
题意 给定 n个长度不超过 10的数字串,问其中是否存在两个数字串S,T ,使得 S是 T的前缀,多组数据. 题目 Given a list of phone numbers, determine i ...
- 电话号码 【trie树】
电话号码 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描写叙述 给你一些电话号码,请推断它们是否是一致的,即是否有某个电话是还有一个电话的前缀. 比方: Emerg ...
- 双数组trie树的基本构造及简单优化
一 基本构造 Trie树是搜索树的一种,来自英文单词"Retrieval"的简写,可以建立有效的数据检索组织结构,是中文匹配分词算法中词典的一种常见实现.它本质上是一个确定的有限状 ...
- 基于Trie 树实现简单的中文分词
中文分词简介 中文分词是中文自然语言处理的基础,中文分词的正确率如何直接影响后续的词性标注(也有些词性标注算法不需要事先分词,但标注效果往往比先分词后标注差),实体识别.句法分析.语义分析.常用的分词 ...
- POJ 2418 Hardwood Species(trie 树)
题目链接 开始想用map的,字典序不会搞,还是老老实实的用trie树把.好久没写了,忘得差不多了. 1 #include <iostream> 2 #include <cstdio& ...
- poj 2503 Trie树
典型的Trie树, 算是复习一下字符串吧, 就是输入有点恶心,代码如下: #include <cstdio> #include <cstring> #include <a ...
- poj 2945 Find the Clones 用trie树实现
/*原来动态构树是这么费时间的...20000个单词最长为20个的题,跑到了1688MS,题目: 题目大概是说找出相同的字符串并且统计个数.分析: 因为昨天刚学完trie树,现在练了几道,有点感觉了, ...
- 算法 | 动画+解析,轻松理解「Trie树」
Trie这个名字取自"retrieval",检索,因为Trie可以只用一个前缀便可以在一部字典中找到想要的单词. 虽然发音与「Tree」一致,但为了将这种 字典树 与 普通二叉树 ...
- 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树......
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 上篇文章我们主要介绍了线性数据结构,本篇233酱带大家看看 无所不 ...
最新文章
- 利用Python绘制 3D 体素色温图
- 计算机网络技术协议名词解释,网络协议名词解释
- 坑爹的去哪儿网订酒店经历
- 电脑PDF怎么转换成WPS,这招你学会了
- python re模块下载_python re模块详解
- 雷赛运动控制卡_EeIE智博会展商推荐雷赛智能—智能装备运动控制领域的知名品牌和行业领军企业...
- linux输入命令对话框,linux里命令的对话框whiptail
- 为什么自己编写的页面总是在那里抖动_别克威朗为什么销量不佳?
- Docker存储空间不够,如何Docker修改存储位置以进行扩容
- Python算法(含源代码下载)
- wgan 不理解 损失函数_[图像盲去噪与GAN]GCBD翻译理解
- 月薪没过3W,肯定是没关注这几位大佬的公众号
- IV 估计:工具变量不外生时也可以用!
- 项目管理和产品立项流程图
- 英语写作神器Quillbot---如何使用免费的Premium功能
- 再回顾SGX初始化(二)——uRTS端构建Enclave
- python算法——字符串表达式的计算
- 实名认证(二要素校验)-含手机验证码校验
- 淘宝私域流量有哪些?怎么获取淘宝私域流量?
- English trip EM2-PE 3B Teacher:Olivia