View Code of Problem 1086

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
//字典树模板题 
int Tire[100010][26];
char arr[10001][35];
int v[100010];
int cnt=1;
void _insert(char s[]){
	int root=0;
	for(int i=0;s[i];i++){
		int next=s[i]-'a';
		if(!Tire[root][next])
			Tire[root][next]=++cnt;
		root=Tire[root][next];v[root]++;
	}
	
	
}
void _find(char bufs[]){
	int root=0;
	int next;
	for(int i=0;bufs[i];i++){
		next=bufs[i]-'a';
		printf("%c",bufs[i]);
		root=Tire[root][next];
		if(v[root]==1)
			break;
	}
}
 
int main()
{
   	char str[1005];
   	int tot=0;
	while(~scanf("%s",str)) {
		if(str=="0")
			break;
		tot++;
		strcpy(arr[tot],str);
		_insert(arr[tot]);
	}
	for(int i=1; i<=tot; i++) {
		printf("%s ",arr[i]);
		_find(arr[i]);
		printf("\n");
	}
   	return 0;
}

Double click to view unformatted code.


Back to problem 1086