POJ 2001 사전 나무 누 드 문제

1715 단어 사전 트 리
구 야 의 블 로그,전재 출처 를 밝 혀 주세요.http://blog.csdn.net/acmmmm/article/details/12258411
단어 마다 접 두 사 를 가장 짧게 반복 하지 않 기 를 바 랍 니 다.
#include      
#include      
#include      
#include      
#include      
#include      
#include         
#include         
#include         
#include         
#include         
#define ll int
using namespace std;      
inline ll Min(ll a,ll b){return a>b?b:a;}    
inline ll Max(ll a,ll b){return a>b?a:b;}    

#define Word_Len 10000
#define Sigma_size 30

int ch[Word_Len][Sigma_size];	 //Word_Len                Sigma_size=26
int Have_word[Word_Len];		 //          
int val[Word_Len];				 //          ,    0           ,          !=0
int sz ;						 //     
//      
void init(){ 
	sz = 1; 
	memset(ch[0], 0, sizeof(ch[0])); 
	memset(val, 0, sizeof(val));
	memset(Have_word, 0, sizeof(Have_word));
}//   
int idx(char c){ return c-'a';}	 //     

void Creat(char *s){
	int u = 0, len = strlen(s);
	for(int i = 0; i < len; i++){
		int c = idx(s[i]);
		if(!ch[u][c]){		     //     
			memset(ch[sz], 0, sizeof(ch[sz]));
			ch[u][c] = sz++;
		}
		u = ch[u][c];
		Have_word[u]++;
	}
}
void find_ans(char *s){
	int u = 0, len = strlen(s);
	for(int i = 0; i < len; i++){
		int c = idx(s[i]);
		u = ch[u][c];
		printf("%c",s[i]);
		if(Have_word[u]==1) return ;
	}
}


char S[1002][25];
int n;
int main(){
	n=0;
	init();
	while(~scanf("%s",S[n])){
		Creat(S[n]);
		n++;
	}
	for(int i=0;i

좋은 웹페이지 즐겨찾기