题目大意:在n个单词中,如果以s作为前缀的单词个数不超过5个,那么称s为proper prefix。如果s为proper prefix并且s的任何一个前缀(不包括s)都不是proper prefix,那么称s为shortest proper prefix,找出词典中shortest proper prefix的个数。

题目分析:建立一棵trie,在trie上深搜即可。

代码如下:

  1. # include<iostream>
  2. # include<cstdio>
  3. # include<cstring>
  4. # include<vector>
  5. # include<queue>
  6. # include<list>
  7. # include<set>
  8. # include<map>
  9. # include<string>
  10. # include<cmath>
  11. # include<cstdlib>
  12. # include<algorithm>
  13. using namespace std;
  14. # define LL long long
  15.  
  16. const int N=1005;
  17. const int INF=1000000000;
  18. const LL oo=0x7fffffffffffffff;
  19. const double eps=1e-10;
  20.  
  21. struct Node
  22. {
  23. int u,l;
  24. Node(){}
  25. Node(int _u,int _l):u(_u),l(_l){}
  26. };
  27. int cnt,n;
  28. int size[N*N<<1];
  29. int tr[N*N<<1][26];
  30.  
  31. void init()
  32. {
  33. cnt=1;
  34. memset(tr,0,sizeof(tr));
  35. memset(size,0,sizeof(size));
  36. }
  37.  
  38. void insert(string p)
  39. {
  40. int len=p.size();
  41. int u=0;
  42. for(int i=0;i<len;++i){
  43. int c=p[i]-'a';
  44. if(!tr[u][c]) tr[u][c]=cnt++;
  45. u=tr[u][c];
  46. ++size[u];
  47. }
  48. }
  49.  
  50. void dfs(int u,int &ans)
  51. {
  52. if(u>0&&size[u]<=5){
  53. ++ans;
  54. }else{
  55. for(int i=0;i<26;++i)
  56. if(tr[u][i]) dfs(tr[u][i],ans);
  57. }
  58. }
  59.  
  60. int solve()
  61. {
  62. int ans=0;
  63. dfs(0,ans);
  64. return ans;
  65. }
  66.  
  67. int main()
  68. {
  69. string p;
  70. while(~scanf("%d",&n))
  71. {
  72. init();
  73. while(n--)
  74. {
  75. cin>>p;
  76. insert(p);
  77. }
  78. printf("%d\n",solve());
  79. }
  80. return 0;
  81. }

  

hihoCoder#1107 : Shortest Proper Prefix (前缀树)的更多相关文章

  1. [HIHO1107]Shortest Proper Prefix(trie)

    题目链接:http://hihocoder.com/problemset/problem/1107 题意:求有多少非依赖前缀,使得前缀下标识的字符串不超过5个. 这里非依赖的意思是,假如前缀a,b,a ...

  2. [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  3. [Swift]LeetCode208. 实现 Trie (前缀树) | Implement Trie (Prefix Tree)

    Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...

  4. 208 Implement Trie (Prefix Tree) 字典树(前缀树)

    实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个方法.注意:你可以假设所有的输入都是小写字母 a-z.详见:https://leetcode.co ...

  5. 支持中文的基于词为基本粒度的前缀树(prefix trie)python实现

    Trie树,也叫字典树.前缀树.可用于"predictive text"和"autocompletion".亦可用于统计词频(边插入Trie树边更新或加入词频) ...

  6. [LeetCode] 208. Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...

  7. Leetcode208. Implement Trie (Prefix Tree)实现Trie(前缀树)

    实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert(" ...

  8. 【LeetCode】208. Implement Trie (Prefix Tree) 实现 Trie (前缀树)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:Leetcode, 力扣,Trie, 前缀树,字典树,20 ...

  9. python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)

    python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容:(1)利用python中的dict实现Trie:(2) ...

随机推荐

  1. awt可视化界面上传数据到mysql,jsp通过jdbc方式查询数据库,并将结果打印在网页上

    今天尝试写一个小demo实现下之前看过的代码,目的了解不同文件的数据访问,掌握如何获取前台数据,如何将数据库的数据在前端页面展示. awt可视化界面可已实现提交数据到数据库,也可查询数据在控制台打印. ...

  2. springMVC文件上传(转)

    原文链接: http://www.cnblogs.com/lonecloud/p/5989905.html 在Spring-mvc.xml注入bean 1 <!-- 配置文件上传,如果没有使用文 ...

  3. SharePoint表单和工作流 - Nintex篇(六)

    博客地址 http://blog.csdn.net/foxdave 接上篇点击打开链接 在工作流Action的配置对话框中,点击"Edit with Nintex Forms",上 ...

  4. 如何使用SVN管理我们的源代码

    今天把公司的SVN服务器配置给做了一下,根据公司部门的不同,划分了不同的访问目录,并给不同目录配置了相应的权限,算是把这份差事给干完了,但其实我对自己的工作是不满意和有遗憾的,因为目前公司的SVN服务 ...

  5. 转 Learning To Rank之LambdaMART的前世今生

    http://blog.csdn.net/huagong_adu/article/details/40710305

  6. jQuery 关于 end() 方法的详细解释

    <ul class="first"> <li class="foo">list item 1</li> <li> ...

  7. MagSpoof:能预测并窃取你下一张信用卡号码的廉价设备

    想象一下,你丢失了信用卡,并从银行申请了一张新的信用卡.但是,如果在你收到这张新卡之前,一些网络罪犯就已经在使用你的新信用卡,此时你作何感想?是的,这完全是可以实现的,至少使用这个仅仅10美元的设备M ...

  8. phpstom 实用laravel 需要附加的 命令

    首先利用composer 下载相关的插件 在根目录执行此代码 composer require barryvdh/laravel-ide-helper 再者在config/app.php 添加一条命令 ...

  9. https 三次握手

    1,客户端输入https网址,链接到server443端口: 2,服务器手中有一把钥匙和一个锁头,把锁头传递给客户端.数字证书既是公钥,又是锁头 3,客户端拿到锁头后,生成一个随机数,用锁头把随机数锁 ...

  10. 解决magento新闻邮件发送一直处于“正在发送”状态问题

    今天在弄magento新闻邮件发送时候发现,单个邮件发送完全没有问题,但是新闻邮件订阅死活都不成功,国内国外的帖子都翻了一遍没有用,最后还是得靠自己了,于是开始慢慢找问题   首先想到是不是cront ...