1.链接地址:

http://bailian.openjudge.cn/practice/2001

http://poj.org/problem?id=2001

2.题目:

Shortest Prefixes
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 12208   Accepted: 5210

Description

A prefix of a string is a substring starting at the beginning of the given string. The prefixes of "carbon" are: "c", "ca", "car", "carb", "carbo", and "carbon". Note that the empty string is not considered a prefix in this problem, but every non-empty string is considered to be a prefix of itself. In everyday language, we tend to abbreviate words by prefixes. For example, "carbohydrate" is commonly abbreviated by "carb". In this problem, given a set of words, you will find for each word the shortest prefix that uniquely identifies the word it represents.

In the sample input below, "carbohydrate" can be abbreviated to "carboh", but it cannot be abbreviated to "carbo" (or anything shorter) because there are other words in the list that begin with "carbo".

An exact match will override a prefix match. For example, the prefix "car" matches the given word "car" exactly. Therefore, it is understood without ambiguity that "car" is an abbreviation for "car" , not for "carriage" or any of the other words in the list that begins with "car".

Input

The input contains at least two, but no more than 1000 lines. Each line contains one word consisting of 1 to 20 lower case letters.

Output

The output contains the same number of lines as the input. Each line of the output contains the word from the corresponding line of the input, followed by one blank space, and the shortest prefix that uniquely (without ambiguity) identifies this word.

Sample Input

carbohydrate
cart
carburetor
caramel
caribou
carbonic
cartilage
carbon
carriage
carton
car
carbonate

Sample Output

carbohydrate carboh
cart cart
carburetor carbu
caramel cara
caribou cari
carbonic carboni
cartilage carti
carbon carbon
carriage carr
carton carto
car car
carbonate carbona

Source

Rocky Mountain 2004

3.思路:

4.代码:

 1 //2010-05-09
 2 //create by wuzhihui
 3 #include<iostream>
 4 #include <cstdio>
 5 #include <cstdlib>
 6
 7
 8 using namespace std;
 9
10 #define chars 26
11 #define MAXCONTENT 1002
12 #define MAXLENGTH 21
13
14
15 typedef struct TrieNode
16 {
17     int num;
18     TrieNode *next[chars];
19 }TrieNode,*TrieTree;
20 char str[MAXCONTENT][MAXLENGTH];
21
22 TrieTree root=NULL;
23
24 void insert(char *s)
25 {
26      int k=0;
27
28      if(root==NULL)
29      {
30          root=(TrieTree)malloc(sizeof(TrieNode));
31          root->num=0;
32          for(k=0;k<chars;k++) root->next[k]=NULL;
33      }
34      TrieTree p=root;
35
36      int i=0;
37      int index;
38      while(s[i]!='\0')
39      {
40         index=s[i]-'a';
41         if(p->next[index]==NULL)
42         {
43             p->next[index]=(TrieTree)malloc(sizeof(TrieNode));
44             p->next[index]->num=0;
45             for(k=0;k<chars;k++) p->next[index]->next[k]=NULL;
46         }
47         p=p->next[index];
48         p->num++;
49         i++;
50      }
51 }
52
53 void search(char *s)
54 {
55      int i=0,index;
56      TrieTree p=root;
57      while(s[i]!='\0')
58      {
59           index=s[i]-'a';
60           p=p->next[index];
61           putchar(s[i]);
62           if(p->num==1) break;
63           i++;
64      }
65      putchar('\n');
66 }
67 int main()
68 {
69     int size=0,i;
70     //int n=12;
71     while(scanf("%s",str[size])!=EOF)
72     //while(n-- && scanf("%s",str[size])!=EOF)
73     {
74          insert(str[size]);
75          size++;
76     }
77     for(i=0;i<size;i++)
78     {
79        printf("%s ",str[i]);
80        search(str[i]);
81     }
82     //system("pause");
83     return 0;
84 }

转载于:https://www.cnblogs.com/mobileliker/p/3581257.html

OpenJudge/Poj 2001 Shortest Prefixes相关推荐

  1. [poj 2001] Shortest Prefixes (字典树)

    Language: Shortest Prefixes Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 20503 Accepte ...

  2. poj 2001 Shortest Prefixes(特里)

    主题链接:http://poj.org/problem?id=2001 Description A prefix of a string is a substring starting at the ...

  3. Poj 2001 Shortest Prefix(字典树模板)

    字典树入门题...... 只需在对应结点记录num值,找到num为1时的前缀,是唯一前缀(只是该单词的前缀),或者一直找找到该单词结尾. #include <iostream> #incl ...

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

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

  5. OpenJudge/Poj 1915 Knight Moves

    1.链接地址: http://bailian.openjudge.cn/practice/1915 http://poj.org/problem?id=1915 2.题目: 总Time Limit: ...

  6. OpenJudge/Poj 2027 No Brainer

    1.链接地址: http://bailian.openjudge.cn/practice/2027 http://poj.org/problem?id=2027 2.题目: 总Time Limit: ...

  7. OpenJudge/Poj 1163 The Triangle

    1.链接地址: http://bailian.openjudge.cn/practice/1163 http://poj.org/problem?id=1163 2.题目: 总时间限制: 1000ms ...

  8. OpenJudge/Poj 1226 Substrings

    1.链接地址: http://bailian.openjudge.cn/practice/1226/ http://poj.org/problem?id=1226 2.题目: 总时间限制: 1000m ...

  9. Shortest Prefixes

    poj2001:http://poj.org/problem?id=2001 题意:给你一些单词,然后让你寻找每个单词的一个前缀,这个前缀能够唯一表示这个单词,并且是最短的. 题解:直接用trie树来 ...

最新文章

  1. 用Pytorch给你的母校做一个样式迁移吧!
  2. Activiti操作数据库中文乱码
  3. Javascript学习笔记12——Ajax入门
  4. tensorflow随笔-条件语句-tf.case
  5. qt中根据数据解析的结果动态的创建控件并布局
  6. 【干货】TCP/IP协议三次握手四次挥手
  7. php7的核心开发者,php7 五大新特性
  8. BeautifulSoup([your markup]) to this: BeautifulSoup([your markup], lxml) 解决未设置默认解析器的错误...
  9. 一图读懂resnet神经网络
  10. 画画不只是为了艺考,还能成为一门手艺~
  11. 计算机编程的地位,学习编程的重要性
  12. 找靓机用计算机表白,找靓机怎么样-2300元的鼠标用起来怎么样?Finalmouse Ultralight Phantom体验...
  13. 分层结构的生活例子_分层处理,各个击破(案例分析)
  14. Photoshop滤镜给城市夜空添加满天星光
  15. hashCode()和哈希值
  16. JVM笔记(三):垃圾回收篇
  17. 【python学习笔记】25:scipy中值滤波
  18. springboot添加切面
  19. Tuscany是什么?为什么要用Tuscany命名SCA规范的实现?
  20. Barcode读取之barcode_para_contrast_min.hdev

热门文章

  1. 大专生如何报考MBA
  2. windows 7 全屏游戏解决方案
  3. [树组BIT]训练两题重新理解ver.
  4. MySQL · 捉虫动态 · event_scheduler 慢日志记错
  5. [译] 解密 Airbnb 的数据科学部门如何构建知识仓库
  6. Windows Mobile 设备中心 for vista 一览
  7. LLVM笔记(1) - TableGen
  8. Go语言开发者福利 - 国内版 The Go Playground
  9. Linux 常用命令标记
  10. 《javascript高级程序设计》笔记:内存与执行环境