标签:
Description
Input
Output
Sample Input
Sample Output
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cctype>
using namespace std;
struct f
{
int next[30];
int v;
char englishi[15];
void ff()
{
memset(next,-1,sizeof(next));
v=0;
englishi[0]=‘\0‘;
}
};f s [1000000];
int cut=0;
void charu(char *s1,char *s2)
{
int i,k=0,su;
for (i=0;s2[i]!=‘\0‘;i++)
{
su=s2[i]-‘a‘;
if (s[k].next[su]==-1)
{
cut++;
s[k].next[su]=cut;
s[cut].ff();
}
k=s[k].next[su];
}
s[k].v=1;
strcpy(s[k].englishi,s1);
return ;
}
int find(char *s1)
{
int i,k=0,su;
for (i=0;i<strlen(s1);i++)
{
su=s1[i]-‘a‘;
if (s[k].next[su]==-1) break;
k=s[k].next[su];
}
if (s[k].v&&s[k].englishi[0]!=‘\0‘&&i==strlen(s1))
{
printf("%s",s[k].englishi);
return 0;
}
return 1;
}
int main()
{
char str1[3005],str2[3005];
int z,i;
s[cut].ff();
gets(str1);
while (~scanf("%s",&str1))
{
if (strcmp("END",str1)==0) break;
scanf("%s",&str2);
charu(str1,str2);
}
getchar();
gets(str1);
while (1)
{
gets(str1);
if (str1[0]==‘E‘&&str1[1]==‘N‘&&str1[2]==‘D‘&&str1[3]==‘\0‘) break;
z=0;
for (i=0;str1[i]!=‘\0‘;i++)
{
if (islower(str1[i]))
{
str2[z]=str1[i];
z++;
}
else
{
str2[z]=‘\0‘;
if (find(str2)) printf("%s",str2);
printf("%c",str1[i]);
z=0;
}
}
if (z!=0)
{
str2[z]=‘\0‘;
if (find(str2)) printf("%s",str2);
z=0;
}
printf("\n");
}
return 0;
}
HDOJ-1075 What Are You Talking About 字典树
标签:
原文地址:http://www.cnblogs.com/pblr/p/4712712.html