POJ2001 Shortest Prefixes
来源:互联网 发布:不需要域名的企业邮箱 编辑:程序博客网 时间:2024/05/24 05:02
题目链接:http://poj.org/problem?id=2001
另一种字典树的写法……
#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct trie{ int ch[100100][30]; int num[100100]; int sz; void reset(){ memset(ch[0], 0, sizeof(ch[0])); memset(num, 0, sizeof(num)); sz = 1; } int idx(char c){ return c - 'a'; } void insert(string s){ int u = 0, n = s.size(); for (int i = 0; i < n; i++){ int c = idx(s[i]); if (!ch[u][c]){ ch[u][c] = sz; memset(ch[sz], 0, sizeof(sz)); num[sz] = 1; sz += 1; } else num[ch[u][c]] += 1; u = ch[u][c]; } } void print(string s){ int u = 0, n = s.size(); for (int i = 0; i < n; i++){ int c = idx(s[i]); putchar(s[i]); if (num[ch[u][c]] == 1) return; u = ch[u][c]; } }}t;string s[2010];int main(){ //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int n = 0; t.reset(); while (cin >> s[n]) t.insert(s[n++]); for (int i = 0; i < n; i++){ cout << s[i] << " "; t.print(s[i]); printf("\n"); } return 0;}
#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct trie{ int num; int next[30]; int init(){ num = 1; memset(next, -1, sizeof(next)); return 0; }}tree[100100];int sz = 1;const int rt = 0;int idx(char c){ return c - 'a';}void insert(string s){ int p = rt, n = s.size(); for (int i = 0; i < n; i++){ int v = idx(s[i]); if (tree[p].next[v] == -1){ tree[p].next[v] = sz; tree[sz].init(); sz += 1; } else tree[tree[p].next[v]].num += 1; p = tree[p].next[v]; }}void print(string s){ int p = rt, n = s.size(); for (int i = 0; i < n; i++){ int v = idx(s[i]); putchar(s[i]); if (tree[tree[p].next[v]].num == 1) return; p = tree[p].next[v]; }}void init(){ sz = 1; tree[0].init();}string s[2010];int main(){ init(); int n = 0; while(cin >> s[n]) insert(s[n++]); for (int i = 0; i < n; i++){ cout << s[i] << " "; print(s[i]); printf("\n"); } return 0;}
- POJ2001 Shortest Prefixes
- poj2001 Shortest Prefixes
- 【poj2001】Shortest Prefixes
- POJ2001--Shortest Prefixes
- poj2001 Shortest Prefixes
- poj2001 Shortest Prefixes
- POJ2001 Shortest Prefixes
- poj2001 Shortest Prefixes
- 【POJ2001】Shortest Prefixes
- POJ2001[Shortest Prefixes]--Trie
- POJ2001-Shortest Prefixes
- POJ2001 - Shortest Prefixes - 字典树
- POJ2001——Shortest Prefixes
- POJ2001 Shortest Prefixes【字典树】
- 【poj2001】Shortest Prefixes 字典树
- POJ2001 Shortest Prefixes(字典树)
- poj2001 Shortest Prefixes (trie树)
- poj2001 Shortest Prefixes trie树
- Objective中SEL和@selecter精讲
- linux进程状态浅析
- 实现PHP文件上传模块
- 无法打开类型库文件:“msxml.dll”: No such file or directory(win7)
- 2013 年4月14号校赛B题 进制转化问题
- POJ2001 Shortest Prefixes
- 2013 年校赛C题 小明的积木
- 阶乘模板
- 校赛 E 题 Cows and Primitive Roots
- 如何把梯形平分成两个面积相等的图形
- VMware的面试题
- 面试题目---小字节序、大字节序、程序判断 网络字节 主流机器字节序
- 如何判断堆栈是从上往下还是从下往上增长的
- 操作系统常见面试题总结