2797:最短前缀
总时间限制: 1000ms 内存限制: 65536kB
描述
一个字符串的前缀是从该字符串的第一个字符起始的一个子串。例如 “carbon"的字串是: “c”, “ca”, “car”, “carb”, “carbo”, 和 “carbon”。注意到这里我们不认为空串是字串, 但是每个非空串是它自身的字串. 我们现在希望能用前缀来缩略的表示单词。例如, “carbohydrate” 通常用"carb"来缩略表示. 现在给你一组单词, 要求你找到唯一标识每个单词的最短前缀
在下面的例子中,“carbohydrate” 能被缩略成"carboh”, 但是不能被缩略成"carbo" (或其余更短的前缀) 因为已经有一个单词用"carbo"开始
一个精确匹配会覆盖一个前缀匹配,例如,前缀"car"精确匹配单词"car". 因此 “car” 是 "car"的缩略语是没有二义性的 , “car”不会被当成"carriage"或者任何在列表中以"car"开始的单词.
输入
输入包括至少2行,至多1000行. 每行包括一个以小写字母组成的单词,单词长度至少是1,至多是20.
输出
输出的行数与输入的行数相同。每行输出由相应行输入的单词开始,后面跟着一个空格接下来是相应单词的没有二义性的最短前缀标识符。
样例输入
carbohydrate
cart
carburetor
caramel
caribou
carbonic
cartilage
carbon
carriage
carton
car
carbonate
样例输出
carbohydrate carboh
cart cart
carburetor carbu
caramel cara
caribou cari
carbonic carboni
cartilage carti
carbon carbon
carriage carr
carton carto
car car
carbonate carbona
来源
翻译自Rocky Mountain 2004

问题链接:Bailian2797 最短前缀
问题描述:(略)
问题分析
    这个问题与参考链接是同一个问题,是有关字典树的题。
程序说明:(略)
参考链接:UVALive3046 ZOJ2346 Shortest Prefixes【字典树】
题记:(略)。

AC的C语言程序如下:

/* POJ2001 Shortest Prefixes */#include <iostream>
#include <stdio.h>
#include <string.h>using namespace std;#include <iostream>
#include <vector>
#include <stdio.h>
#include <string.h>using namespace std;const int N = 1000;
const int LEN = 20;
const int SIZE = 26;
const char SCHAR = 'a';struct Node {int cnt;int child[SIZE];
} trie[N * LEN];
int ncnt;void insert(string& s)
{int p = 0;for (int i = 0; s[i]; i++) {trie[p].cnt++;int k = s[i] - SCHAR;if(trie[p].child[k] == 0)trie[p].child[k] = ++ncnt;p = trie[p].child[k];}trie[p].cnt++;
}int query(string& s)
{int p = 0;for (int i = 0; s[i]; i++) {p = trie[p].child[s[i] - SCHAR];if(trie[p].cnt <= 1) {return i;}}return -1;
}int main()
{string s[N + 1];ncnt = 0;memset(trie, 0, sizeof(trie));int tot = 0;while (getline(cin, s[tot]) && s[tot][0])insert(s[tot++]);for (int i = 0; i < tot; i++) {int len = query(s[i]);cout << s[i] << " " << ((len < 0) ?  s[i] : s[i].substr(0, len + 1)) << endl;}return 0;
}

Bailian2797 最短前缀【字典树】相关推荐

  1. 最长公共前缀 字典树 NC55

    class Tire{ public:Tire *children[26];int size;bool isend=false;Tire(){size=0;for(int i=0;i<26;i+ ...

  2. 字典树(Trie树)两种实现方式详解

    目录 字典树介绍 字典树二维数组实现 实现思路 代码实现 字典树节点链表实现 实现思路 代码实现 字典树介绍 字典树,又称单词查找树. 其根节点不包含字符,除根节点外每一个节点都只包含一个字符: 从根 ...

  3. HDU 5457 Hold Your Hand【最小割+字典树】

    在这里先感谢YYN菊苣对我解题的帮助. 首先,我们按照前缀和后缀建立两棵字典树. 节点总数为256∗8∗2256*8*2,每一个叶子节点是我们的数字. 其次,我们对读入的操作来更新字典树,假设字典树有 ...

  4. 【POJ - 2001 】Shortest Prefixes (字典树,查询重复前缀区间)

    题干: A prefix of a string is a substring starting at the beginning of the given string. The prefixes ...

  5. CSU 1115: 最短的名字(字典树)

    1115: 最短的名字 题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1115 Description 在一个奇怪的村子中,很多人的名字都 ...

  6. 【HDOJ6955】Xor sum(异或前缀和,01字典树)

    1006 Xor sum 题意: 给出一个长度为n的序列,求一个最短连续子序列满足异或和大于等于k.n<1e5. 思路: 参考CF665E,求序列a中有多少个异或和大于等于k的子序列,枚举所有的 ...

  7. 字典树学习 根据前缀词根建立字典树

    一.字典树概念 字典树又被称作Trie树,其效率非常高,所以在字符串查找,前缀匹配中应用非常广泛,其高效率是以空间为代价的.典型应用是用于统计和排序大量的字符串,它的优点是,最大限度地减少无谓的字符串 ...

  8. 字典树(Trie,前缀树)

    目录 一,字典树 二,OJ实战 CSU 1115 最短的名字 HDU 1075 What Are You Talking About 力扣 1804. 实现 Trie (前缀树) II 力扣 139. ...

  9. Trie(字典树/前缀树)

    字典树/前缀树 Trie(发音类似 "try")或者说 前缀树(字典树) 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键.这一数据结构有相当多的应用情景,例如自动补完和 ...

最新文章

  1. MATLAB修改工作环境
  2. 编程软件python中的if用法-适合Python初学者的一些编程技巧
  3. Web 端的下一代三维图形
  4. nedata实时监控服务器运行情况
  5. CSS之:active选择器
  6. 3.1.3 覆盖与交换
  7. 为什么 Django 框架持续统治着 Python 开发?
  8. 深有体会的积极人生态度
  9. 趣味编程:C#中Specification模式的实现
  10. spark SQL(三)数据源 Data Source----通用的数据 加载/保存功能
  11. 20155212 2016-2017-2 《Java程序设计》第3周学习总结
  12. 关于安装CNPM 与搭建VUE空白项目
  13. android 最新微信红包,GitHub - lthis/WeChatLuckyMoney: 微信抢红包插件 for Android
  14. Linux 版本查询常用命令
  15. j3455linux网卡不亮,最新J3455主板直接安装黑群晖的若干问题解决办法
  16. 纯js 编canvas处理图片, 涂鸦笔、画布图片内容旋转 放大缩小 裁剪框 。兼容ie9及以上 谷歌、360、火狐浏览器
  17. slab为什么要进行染色处理
  18. 加密算法之PKCS填充
  19. CCC3.0学习笔记_认证和隐私保护
  20. 25匹马,5个跑道,每次只能跑5匹,用最少的次数选出最快的前3匹

热门文章

  1. JavaWeb——web.xml配置详细解读
  2. LNMP(linux+nginx+mysql+php)服务器环境配置
  3. 5.2.5 标准的原子整型的相关操作
  4. ecology9 系统文件常用说明
  5. (亲测)Hbase安装(傻瓜式安装)
  6. cms运行php,迅睿CMS 主程序运行之后
  7. 计算机跳转列表常用组合框,2015计算机二级VB考点复习指导:列表框和组合框
  8. 剑指offer面试题29. 顺时针打印矩阵(边界问题)
  9. 微服务的隔离和熔断机制
  10. opencv OCR 端到端场景文本检测与识别(webcam_demo) vs2015