您的位置:首页 > 其它

hdu-1247

2016-02-17 19:54 363 查看
思路:

字典树模板题

#include <iostream>
#include <cstring>
#include <cstdio>
#define MAX 500007
using namespace std;

struct node
{
int e;
struct node* next[26];
};
node* root;
char str[MAX][50];

void Insert(char* s)
{
node* ptr = root;
for(;*s != '\0';s++)
{
int n = *s-'a';
if(ptr->next
== NULL)
ptr->next
= new node();
ptr = ptr->next
;
}
ptr->e = 1;
}

bool find2(char* s)
{
node* ptr = root;
for(;*s != '\0';s++)
{
int n = *s-'a';
ptr = ptr->next
;
if(ptr != NULL) {
if(ptr->e==1 && *(s+1)=='\0')
return true;
}
else
return false;
}
return false;
}

bool find1(char* s)
{
node* ptr = root;
for(;*s != '\0';s++)
{
int n = *s-'a';
ptr = ptr->next
;
if(ptr->e==1 && find2(s+1))
return true;
}
return false;
}

int main()
{
int i = 0;
root = new node();
while(scanf("%s",str[i]) != EOF) {
Insert(str[i]);
i++;
}
for(int j = 0;j < i;j++)
if(find1(str[j]))
cout<<str[j]<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: