学了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树的应用相关推荐

  1. POJ3630——简单Trie树

    这个题的意思是说,给出一些字符串,判断是否有字符串是另一个字符串的前缀,当然可以用排序水过,不过这个题拿来练习一下Trie树不错. 这个题在poj的discuss上好多人说必须要静态建树,估计都是用了 ...

  2. Phone List POJ - 3630(字典树模板题)

    题意 给定 n个长度不超过 10的数字串,问其中是否存在两个数字串S,T ,使得 S是 T的前缀,多组数据. 题目 Given a list of phone numbers, determine i ...

  3. 电话号码 【trie树】

    电话号码 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描写叙述 给你一些电话号码,请推断它们是否是一致的,即是否有某个电话是还有一个电话的前缀. 比方: Emerg ...

  4. 双数组trie树的基本构造及简单优化

    一 基本构造 Trie树是搜索树的一种,来自英文单词"Retrieval"的简写,可以建立有效的数据检索组织结构,是中文匹配分词算法中词典的一种常见实现.它本质上是一个确定的有限状 ...

  5. 基于Trie 树实现简单的中文分词

    中文分词简介 中文分词是中文自然语言处理的基础,中文分词的正确率如何直接影响后续的词性标注(也有些词性标注算法不需要事先分词,但标注效果往往比先分词后标注差),实体识别.句法分析.语义分析.常用的分词 ...

  6. POJ 2418 Hardwood Species(trie 树)

    题目链接 开始想用map的,字典序不会搞,还是老老实实的用trie树把.好久没写了,忘得差不多了. 1 #include <iostream> 2 #include <cstdio& ...

  7. poj 2503 Trie树

    典型的Trie树, 算是复习一下字符串吧, 就是输入有点恶心,代码如下: #include <cstdio> #include <cstring> #include <a ...

  8. poj 2945 Find the Clones 用trie树实现

    /*原来动态构树是这么费时间的...20000个单词最长为20个的题,跑到了1688MS,题目: 题目大概是说找出相同的字符串并且统计个数.分析: 因为昨天刚学完trie树,现在练了几道,有点感觉了, ...

  9. 算法 | 动画+解析,轻松理解「Trie树」

    Trie这个名字取自"retrieval",检索,因为Trie可以只用一个前缀便可以在一部字典中找到想要的单词. 虽然发音与「Tree」一致,但为了将这种 字典树 与 普通二叉树 ...

  10. 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树......

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 上篇文章我们主要介绍了线性数据结构,本篇233酱带大家看看 无所不 ...

最新文章

  1. 利用Python绘制 3D 体素色温图
  2. 计算机网络技术协议名词解释,网络协议名词解释
  3. 坑爹的去哪儿网订酒店经历
  4. 电脑PDF怎么转换成WPS,这招你学会了
  5. python re模块下载_python re模块详解
  6. 雷赛运动控制卡_EeIE智博会展商推荐雷赛智能—智能装备运动控制领域的知名品牌和行业领军企业...
  7. linux输入命令对话框,linux里命令的对话框whiptail
  8. 为什么自己编写的页面总是在那里抖动_别克威朗为什么销量不佳?
  9. Docker存储空间不够,如何Docker修改存储位置以进行扩容
  10. Python算法(含源代码下载)
  11. wgan 不理解 损失函数_[图像盲去噪与GAN]GCBD翻译理解
  12. 月薪没过3W,肯定是没关注这几位大佬的公众号
  13. IV 估计:工具变量不外生时也可以用!
  14. 项目管理和产品立项流程图
  15. 英语写作神器Quillbot---如何使用免费的Premium功能
  16. 再回顾SGX初始化(二)——uRTS端构建Enclave
  17. python算法——字符串表达式的计算
  18. 实名认证(二要素校验)-含手机验证码校验
  19. 淘宝私域流量有哪些?怎么获取淘宝私域流量?
  20. English trip EM2-PE 3B Teacher:Olivia

热门文章

  1. 新学到的Url形成方法
  2. top刷新间隔_还在用top监控CPU?我们都在用glances
  3. Spring身份验证+CXF拦截器+RESTful
  4. Java I/O系统之处理流类型
  5. Prototype使用Event
  6. PyTorch中的梯度微分机制
  7. 系统类配置(三)【ubuntu14.04或者ubuntu16.04 配置caffe】
  8. 【BZOJ2816】【洛谷】【ZJOI2012】—网络(LCT)
  9. leetcode个人题解——#18 4sums
  10. 洛谷P1018乘积最大——区间DP