博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2001 Shortest Prefixes
阅读量:6806 次
发布时间:2019-06-26

本文共 2640 字,大约阅读时间需要 8 分钟。

Shortest Prefixes
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 16357   Accepted: 7096

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

carbohydratecartcarburetorcaramelcariboucarboniccartilagecarboncarriagecartoncarcarbonate

Sample Output

carbohydrate carbohcart cartcarburetor carbucaramel caracaribou caricarbonic carbonicartilage carticarbon carboncarriage carrcarton cartocar carcarbonate carbona

Source

#include
#include
#include
#include
#include
#include
#define F(i,j,n) for(int i=j;i<=n;i++)#define D(i,j,n) for(int i=j;i>=n;i--)#define ll long long#define pa pair
#define maxn 20005#define inf 1000000000using namespace std;struct trie_type{ int cnt,next[30];}t[maxn];int tot=0,n=0;char s[1005][25];inline void insert(char *ch){ int p=0,l=strlen(ch); F(i,0,l-1) { int tmp=ch[i]-'a'; if (!t[p].next[tmp]) t[p].next[tmp]=++tot; p=t[p].next[tmp]; t[p].cnt++; }}inline void find(char *ch){ int p=0,l=strlen(ch); printf("%s ",ch); F(i,0,l-1) { printf("%c",ch[i]); int tmp=ch[i]-'a'; p=t[p].next[tmp]; if (t[p].cnt==1) break; } printf("\n");}int main(){ while (~scanf("%s",s[++n])) insert(s[n]); F(i,1,n-1) find(s[i]);}

转载地址:http://isjwl.baihongyu.com/

你可能感兴趣的文章
div+css 定位浅析
查看>>
AsyncTask和Handler的对比
查看>>
05-线程间通讯
查看>>
CentOS7使用firewalld打开关闭防火墙与端口
查看>>
20135203齐岳 信息安全系统设计基础第三周学习总结(补充)
查看>>
dubbo+zookeeper的使用
查看>>
20050821:搬家了
查看>>
nodejs学习笔记
查看>>
Solr的安装及配置
查看>>
swift 学习- 26 -- 泛型
查看>>
002 C#学前入门
查看>>
Android 创建桌面快捷方式
查看>>
NPOI读取excel功能,兼容xls和xlsx
查看>>
通用业务系统基础平台(四) 行政管理
查看>>
poj2029 Get Many Persimmon Trees
查看>>
Linux用户和组的基础概念
查看>>
权限管理
查看>>
kafka消费组、消费者
查看>>
A股财报摘要历史数据查询Web API使用方法
查看>>
matlab查找回车字符
查看>>