标签:des c style class blog code
START from fiwo hello difh mars riwosf earth fnnvk like fiiwj END START difh, i‘m fiwo riwosf. i fiiwj fnnvk! END
hello, i‘m from mars. i like earth!
题目大意就是翻译文章,从火星文翻译成英文 - - || ,字典里没有的,标点及空格之类的 照火星文原样输出。字典里有的按翻译后输出。
我的解决办法是 用一个数组记录每一个火星单词对应的英文单词,查找时如果找到就返回已经保存下来的英文单词。
注意数组要开大。。RE了好多次。
#include<stdio.h>
#include<string.h>
int ch[7001000][26];
char cun[7001000][31]; //记录已经存在于字典里的词组
int val[7001000] ,sz=1;
char sss[7];
char a[31] , b[31] ,ju[3005];
int id(char x) {return x-'a';}
void Inse(char *s )
{
int u=0;
for(int i=0;s[i];i++) {
int c=id(s[i]);
if(!ch[u][c]) ch[u][c]=sz++;
u=ch[u][c];
}
val[u]=1;
strcpy(cun[u],a);
}
int Find(char *s)
{
int u=0;
for(int i=0;s[i];i++) {
int c=id(s[i]);
if(!ch[u][c]) return -1;
u=ch[u][c];
}
if(val[u] == 1) return u;
else return -1;
}
char s[11];
int main() {
scanf("%s",sss); getchar();
while(1) {
scanf("%s",a);
if(a[0] == 'E') break;
scanf("%s",b); getchar();
Inse(b);
}
scanf("%s",sss); getchar();
while(1) {
gets(ju);
if(ju[0] == 'E')
break;
int k=0;
for(int i=0; ju[i] ;i++) {
if(ju[i]>='a' && ju[i] <= 'z') {
s[k++]=ju[i];
} else if(s[0] != 0){ //如果s里有火星文单词,就去找有没有对应的英文单词
int u=Find(s);
if(u!=-1) printf("%s",cun[u]);
else printf("%s",s);
printf("%c",ju[i]);
memset(s,0,sizeof(s));
k=0;
}
else printf("%c",ju[i]); //如果不是字母且s里没有单词,那么这个字符就可能是标点或空格,直接输出
}
printf("\n");
}
return 0;
}
HDU 1075 What Are You Talking About,布布扣,bubuko.com
HDU 1075 What Are You Talking About
标签:des c style class blog code
原文地址:http://blog.csdn.net/u013923947/article/details/29202017