import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
StreamTokenizer cin = new StreamTokenizer(new BufferedInputStream(System.in));
InputReader in = new InputReader(System.in) ;
PrintWriter out = new PrintWriter(System.out) ;
new Task().solve(cin, out) ;
out.flush() ;
}
}
class Task{
static class TNode{
boolean isend ;
char c ;
TNode[] next ;
public TNode(){
isend = false ;
next = new TNode[26] ;
}
}
TNode root = new TNode() ;
void insert(String s){
TNode now = root ;
for(int i = 0 , n = s.length() ; i < n ; i++){
int d = s.charAt(i) - 'a' ;
if(now.next[d] == null) now.next[d] = new TNode() ;
now = now.next[d] ;
}
now.isend = true ;
}
boolean helper(String s){
ArrayList<Integer> split = new ArrayList<Integer>() ;
TNode now = root ;
int n = s.length() ;
for(int i = 0 ; i < n ; i++){
int d = s.charAt(i) - 'a' ;
if(now.next[d] == null) return false ;
now = now.next[d] ;
if(now.isend && i < n - 1) split.add(i+1) ;
}
for(int e : split){
TNode p = root ;
boolean f = true ;
for(int i = e ; i < n ; i++){
int d = s.charAt(i) - 'a' ;
if(p.next[d] == null){
f = false ;
break ;
}
p = p.next[d] ;
}
if(p.isend && f) return true ;
}
return false ;
}
public void solve(StreamTokenizer cin , PrintWriter out) throws IOException{
String[] word = new String[50008] ;
int n = 0 ;
while(cin.nextToken() != cin.TT_EOF){
word[n] = cin.sval ;
insert(word[n]);
n++ ;
}
for(int i = 0 ; i < n ; i++){
if(helper(word[i])) out.println(word[i]) ;
}
}
}
class InputReader{
public BufferedReader reader;
public StringTokenizer tokenizer;
public InputReader(InputStream stream){
reader = new BufferedReader(new InputStreamReader(stream), 32768);
tokenizer = null;
}
public String next(){
while(tokenizer == null || !tokenizer.hasMoreTokens()){
try{
tokenizer = new StringTokenizer(reader.readLine());
}catch (IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
}
hdu1247字典树
最新推荐文章于 2020-08-26 17:18:11 发布