字典树。

 #include <cstdio>
#include <cstring>
#include <cstdlib> #define MAXN 26 typedef struct Trie{
int n;
Trie *next[MAXN];
} Trie; Trie root;
char buf[][]; void create(char str[]) {
int len = strlen(str);
int i, j, id;
Trie *p = &root, *q; for (i=; i<len; ++i) {
id = str[i] - 'a';
if (p->next[id] == NULL) {
q = (Trie *)malloc(sizeof(Trie));
q->n = ;
for (j=; j<MAXN; ++j)
q->next[j] = NULL;
p->next[id] = q;
p = p->next[id];
} else {
p->next[id]->n++;
p = p->next[id];
}
}
} int find(char str[]) {
int len = strlen(str), i, id;
Trie *p = &root; for (i=; i<len; ++i) {
id = str[i] - 'a';
if (p->next[id] == NULL)
return i;
else {
if (p->next[id]->n == )
return i;
p = p->next[id];
}
} return len;
} void del(Trie *t) {
int i; if (t == NULL)
return ;
for (i=; i<MAXN; ++i)
del(t->next[i]); free(t);
} int main() {
int n = ;
int i = , j; for (i=; i<MAXN; ++i)
root.next[i] = NULL;
root.n = -; while (scanf("%s", buf[n]) != EOF) {
create(buf[n]);
++n;
} for (i=; i<n; ++i) {
printf("%s ", buf[i]);
j = find(buf[i]);
buf[i][j+] = '\0';
printf("%s\n", buf[i]);
} return ;
}

【POJ】2001 Shortest Prefixes的更多相关文章

  1. 【POJ】1704 Georgia and Bob(Staircase Nim)

    Description Georgia and Bob decide to play a self-invented game. They draw a row of grids on paper, ...

  2. 【POJ】1067 取石子游戏(博弈论)

    Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...

  3. POJ 2001 Shortest Prefixes 【 trie树(别名字典树)】

    Shortest Prefixes Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 15574   Accepted: 671 ...

  4. OpenJudge/Poj 2001 Shortest Prefixes

    1.链接地址: http://bailian.openjudge.cn/practice/2001 http://poj.org/problem?id=2001 2.题目: Shortest Pref ...

  5. poj 2001:Shortest Prefixes(字典树,经典题,求最短唯一前缀)

    Shortest Prefixes Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 12731   Accepted: 544 ...

  6. poj 2001 Shortest Prefixes trie入门

    Shortest Prefixes 题意:输入不超过1000个字符串,每个字符串为小写字母,长度不超过20:之后输出每个字符串可以简写的最短前缀串: Sample Input carbohydrate ...

  7. POJ 2001 Shortest Prefixes(字典树活用)

    Shortest Prefixes Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21651   Accepted: 927 ...

  8. poj 2001 Shortest Prefixes(字典树trie 动态分配内存)

    Shortest Prefixes Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 15610   Accepted: 673 ...

  9. 【BZOJ】【1986】【USACO 2004 Dec】/【POJ】【2373】划区灌溉

    DP/单调队列优化 首先不考虑奶牛的喜欢区间,dp方程当然是比较显然的:$ f[i]=min(f[k])+1,i-2*b \leq k \leq i-2*a $  当然这里的$i$和$k$都是偶数啦~ ...

随机推荐

  1. Chapter 3. Installing Gradle 安装gradle

    3.1. Prerequisites Gradle requires a Java JDK or JRE to be installed, version 6 or higher (to check, ...

  2. java实现的可以无限级别添加子节点的菜单树

    网上大部分菜单树,都是单独用js代码来实现的,这样做的缺点是:用户无法动态的设置菜单项,比如,超级管理员可能需要根据每个用户的权限,赋予他们不同的系统功能,不同的功能对应着不同数量的菜单项. 对于此问 ...

  3. xml--小结④DTD的验证问题,不要用IE检验,IE不靠谱

    可以自己写代码 <script type="text/javascript"> var xmldoc = new ActiveXObject("Microso ...

  4. 使用graphics2D给图片上画字符

    //读取图片BufferedImage frontImage = ImageIO.read(new File(eCardXMLConfigManager.geteCardXMLConfigManage ...

  5. Could not parse mapping document from resource cn/spt/model/Student.hbm.xml

    初始hibernate, 写第一个程序 helloworld的错误: Exception in thread "main" org.hibernate.InvalidMapping ...

  6. 利用c语言做简单的迷宫小游戏

                       #include <stdio.h> #define ROW 6 #define COL 6 // 封装打印地图的函数 void printMap(c ...

  7. JS常用的7中跨域方式总结

    javascript跨域有两种情况:  1.基于同一父域的子域之间,如:a.c.com和b.c.com  2.基于不同的父域之间,如:www.a.com和www.b.com  3.端口的不同,如:ww ...

  8. NoSql之Redis使用(一)

    一.安装 1.下载安装包: 官方网站:redis.io 官方推荐windows版本:https://github.com/MSOpenTech/redis 2:下载压缩包,解压后如下 redis-se ...

  9. oracle建立表空间

    //创建临时表空间 create temporary tablespace test_temp tempfile 'E:\oracle\product\10.2.0\oradata\testserve ...

  10. Javascript 中 call 的两种用法

    用法一(常见用法): 表现形式为:一个对象.方法.call(另一个对象),意义是用另一个对象代替当前对象,执行当前对象的方法.先看示例: function Class1(){ this.name = ...