字典树入门——POJ 2001
来源:互联网 发布:淘宝卖家拒签怎么办 编辑:程序博客网 时间:2024/06/06 05:30
对应POJ题目:点击打开链接
Shortest Prefixes
Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64uDescription
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".
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
第一次接触字典树,学习完之后愉快地套模板
#include<cstdio>#include<cstdlib>#include<cmath>#include<map>#include<queue>#include<stack>#include<vector>#include<algorithm>#include<cstring>#include<string>#include<iostream>const int MAXN=1000+10;using namespace std;struct Trie{Trie *next[30];int v;};Trie *root;void CreateTrie(char *str){Trie *p, *q;p=root;int len=strlen(str);for(int i=0; i<len; i++){int id=str[i]-'a';if(p->next[id]==NULL){q=(Trie*)malloc(sizeof(Trie));q->v=1;//初始化为1for(int j=0; j<30; j++)q->next[j]=NULL;p->next[id]=q;p=p->next[id];}else{p->next[id]->v++;p=p->next[id];}}//p->v=-1;}int SearchTrie(char *str){int len=strlen(str);Trie *p=root;for(int i=0; i<len; i++){int id=str[i]-'a';p=p->next[id];cout<<str[i];//cout<<str[i]<<" "<<p->v<<endl;if(p->v==1) return 1; //找到适合的最短前缀if(p==NULL) return 0; //若为空集,表示不存以此为前缀的串if(p->v==-1) return -1; //字符集中已有串是此串的前缀}//return -1; //此串是字符集中某串的前缀}void FreeTrie(Trie *tree){if(tree==NULL) return;for(int i=0; i<30; i++){if(tree->next[i]!=NULL) FreeTrie(tree->next[i]);}free(tree);}int main(){//freopen("in.txt","r",stdin);root=(Trie*)malloc(sizeof(Trie));for(int j=0; j<30; j++)root->next[j]=NULL;char str[1003][25];int len=0;while(cin>>str[len]){CreateTrie(str[len]);len++;}//SearchTrie(str[0]);//cout<<endl;for(int i=0; i<len; i++){cout<<str[i]<<" ";SearchTrie(str[i]);cout<<endl;}FreeTrie(root);return 0;}
0 0
- 字典树入门——POJ 2001
- POJ 2001 Shortest Prefixes(字典树入门)
- poj 2001 字典树入门题(数组实现模板)
- POJ 2001:Shortest Prefixes(字典树入门)
- POJ 2001 字典树
- 字典树 poj 2001
- POJ 2001 字典树
- poj-2001字典树
- POJ 2001 字典树
- poj 2001 字典树
- poj 2001字典树
- POJ 2001 字典树
- 字典树:POJ 2001
- poj--2503+字典树入门题
- POJ 2503 Babelfish 字典树入门题
- POJ 2503:Babelfish(字典树入门)
- poj 2418 字典树+dfs 入门题
- poj 3630 静态字典树入门
- SQLite 入门教程增删改查
- nano-pc-t1 4412 显示驱动分析
- Android jni编程浅入深出之-- 与原生代码通信
- 【cocos2d-x 小知识积累和备忘】
- android 电池管理(大全)
- 字典树入门——POJ 2001
- 《Android编程权威指南》第二章练习的挑战
- GASDFASDFAVXCV
- 为什么RTP往往是使用UDP,而不是使用TCP封装
- 正式入驻CSDN,纪念编程的美好日子
- 【iOS】随机三角形平铺布局算法
- 在微信公众平台前端网页上添加分享到朋友圈,关注微信等按钮
- Java(Android)线程池
- 书写能力