您的位置:首页 > 其它

hdu1075

2015-08-11 19:30 197 查看
链接:点击打开链接

题意:给出一句话按照密文所对应的原文输出应该输出的内容,具体看题目样例就可以

代码:
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
char s[1000005][15];
char s1[3005];
int str[1000005][30],dis[1000005];
int root;
void in(char *s,int v){
int u=0;
for(;*s;s++){
if(!str[u][*s-'a'])
str[u][*s-'a']=root++;
u=str[u][*s-'a'];
}
dis[u]=v;
}
int fi(char *s){
int u=0;
for(;*s;s++){
if(!str[u][*s-'a'])
return 0;
u=str[u][*s-'a'];
}
return dis[u];
}                                        //字典树模板查找密文所对应的原文
int main(){
char temp[3005];
int i,j,len;
memset(str,0,sizeof(str));
memset(dis,0,sizeof(dis));
memset(s,0,sizeof(s));
scanf("%s",temp);
i=root=1;
while(1){
scanf("%s",s[i]);                //用二维数组输入方便输出
if(strcmp(s[i],"END")==0)
break;
scanf("%s",s1);
in(s1,i);
i++;
}
scanf("%s",temp);
getchar();
while(1){
j=0;
memset(s1,0,sizeof(s1));
memset(temp,0,sizeof(temp));
gets(s1);
if(strcmp(s1,"END")==0)
break;
//        len=strlen(s1);
//        if(s1[len-1]>='a'&&s1[len-1]<='z')
//        continue;
for(i=0;s1[i];i++){             //这个题最关键的就是假如最后一个单词没有标点不输出最后一个单词。。。
if(s1[i]>='a'&&s1[i]<='z')
temp[j++]=s1[i];
else{
temp[j]='\0';
//                cout<<temp<<endl;
if(temp[0]!='\0'){      //这个就是将一句话中的单词拆出来
if(fi(temp)!=0)
printf("%s",s[fi(temp)]);
else
printf("%s",temp);
temp[0]='\0';           //将头变成'\0'即可
j=0;
}
printf("%c",s1[i]);
}
//        if(s1[i]=='\0')
//        break;
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: