What Are You Talking About
http://acm.hdu.edu.cn/diy/contest_showproblem.php?cid=12654&pid=1004
Time Limit : 10000/5000ms (Java/Other) Memory Limit : 102400/204800K (Java/Other)
Total Submission(s) : 4 Accepted Submission(s) : 3
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Input
Output
Sample Input
START from fiwo hello difh mars riwosf earth fnnvk like fiiwj END START difh, i'm fiwo riwosf. i fiiwj fnnvk! END
Sample Output
hello, i'm from mars. i like earth!
Hint
Author
#include<iostream>
#include<cstring>
using namespace std;
struct trie{
struct trie *child[26];
char Engword[11]; //存放英语单词
trie(){ //初始化
for(int i=0;i<26;i++)
child[i]=NULL;
Engword[0]='\0';
}
};
struct trie *root;
void insert(char eng[],char mar[]){
int i,len;
struct trie *current=root,*newnode;
len=strlen(mar);
if(len==0) return ;
for(i=0;i<len;i++){
if(current->child[mar[i]-'a']!=NULL)
current=current->child[mar[i]-'a'];
else{
newnode=new trie;
current->child[mar[i]-'a']=newnode;
current=newnode;
}
}
strcpy(current->Engword,eng);//把英语单词插入到火星文的最后一个节点
}
char *find(char *source){
int i,len;
len=strlen(source);
if(len==0) return NULL;
struct trie *current=root;
for(i=0;i<len;i++){
if(current->child[source[i]-'a']!=NULL)
current=current->child[source[i]-'a'];
else
return NULL;
}
if(strcmp(current->Engword,"")!=0)//不等于NULL
return current->Engword;
return NULL;
}
int main(){
char a[11],b[11];
root=new trie;
scanf("%s",a); //吞掉"START"
while(scanf("%s",a) && strcmp(a,"END")!=0){
scanf("%s",b);
insert(a,b);
}
scanf("%s",a); //"START"
getchar(); //注意吞掉回车符
char temp[3005];
while(1){
gets(temp);
if(strcmp(temp,"END")==0) //结束条件
break;
int i,len,k=0;
len=strlen(temp);
temp[len]=' '; //多加一个空格,否则无法输出最后一个单词
temp[++len]='\0';
char p[3005];
for(i=0;i<len;i++){
if(!(temp[i]>='a' && temp[i]<='z') ){ //不是小写字母
p[k]='\0';
char *t=find(p); //查找
if(t) //如果存在就输出英语
printf("%s",t);
else //不存在就原样输出火星文
printf("%s",p);
k=0; //注意恢复 k为 0
if(i!=len-1) //最后一个是多余的空格
printf("%c",temp[i]);//输出非小写字母字符(标点)
}
else
p[k++]=temp[i];
}
printf("\n");
}
// system("pause");
return 0;
}