poj2001 trie

简介:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int T[100100][26] = {0}, num[100100] = {0}, sz = 0;
char s[1010][21];
void Insert(char *s){
	int u = 0;
	for (int i = 0; s[i]; i++){
		int c = s[i] - 'a';
		if (!T[u][c])
			T[u][c] = ++sz;
		u = T[u][c];
		num[u] ++;
	}
}
void Search(char *s){
	int u = 0;
	for (int i = 0; s[i]; i++){
		if (num[u] == 1) break;
		u = T[u][s[i] - 'a'];
		printf("%c", s[i]);
	}
	printf("\n");
}
int main(){
	int n = 0;
	while (scanf("%s", s[++n]) == 1)
		Insert(s[n]);
	for (int i = 1; i <= n; i++){
		printf("%s ", s[i]);
		Search(s[i]);
	}
	    
    return 0;
	
} 

相关文章
|
4月前
|
Java
POJ- 2367- Genealogical tree【拓扑排序】
POJ- 2367- Genealogical tree【拓扑排序】
15 0
|
存储 C++
【LeetCode208】实现Trie(前缀树)
这里的前缀树,即“二十六叉树”,但是对于每个结点(对象),我们可以隐性存储一个字符——每个结点(对象)含有一个size为26的指针数组。接着就从根结点开始遍历判
112 0
【LeetCode208】实现Trie(前缀树)
【HDU 4771 Stealing Harry Potter&#39;s Precious】BFS+状压
2013杭州区域赛现场赛二水。。。 类似“胜利大逃亡”的搜索问题,有若干个宝藏分布在不同位置,问从起点遍历过所有k个宝藏的最短时间。 思路就是,从起点出发,搜索到最近的一个宝藏,然后以这个位置为起点,搜索下一个最近的宝藏,直至找到全部k个宝藏。
1031 0