1. 程式人生 > >poj-2503-Babelfish

poj-2503-Babelfish

理解 地址 per aid RM mar case body 我們

Description

You have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortunately, you have a dictionary to help you understand them.

Input

Input consists of up to 100,000 dictionary entries, followed by a blank line, followed by a message of up to 100,000 words. Each dictionary entry is a line containing an English word, followed by a space and a foreign language word. No foreign word appears more than once in the dictionary. The message is a sequence of words in the foreign language, one word on each line. Each word in the input is a sequence of at most 10 lowercase letters.

Output

Output is the message translated to English, one word per line. Foreign words not in the dictionary should be translated as "eh".

Sample Input

dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay

atcay
ittenkay
oopslay

Sample Output

cat
eh
loops

Hint

Huge input and output,scanf and printf are recommended.


這個題須要用到字典樹,那麽什麽是字典樹呢?

百度一下就可知道了------>地址是:Trie樹

我比較喜歡用數組來寫字典樹。我在這放了兩張圖片!

希望能幫助理解!

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??技術分享圖片

技術分享圖片

本題題意:是要求我們將某一個星球的單詞翻譯成相應的英語,假設有就輸出相應的英文,沒有就不輸出!

思路:這個題先得用某一個星球的單詞來建立一個字典樹,然後再將相應單詞“放”在葉子節點後面,能夠將其比喻為有墜子的耳環!然後在翻譯時直接查找就可以!

然後就是處理最開始的一段輸入的問題了!

gets(str)是以‘\n’作為結束符的,另外,它也是能夠讀入回車符的。所以就用gets(str)

作為輸入。用兩個for循環便可輕松的將英語單詞和某球單詞分開。此處就不作其他優化了!然後就可進行建樹了。



AC代碼例如以下:


技術分享圖片


#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int maxn=201314;
struct Tree
{
    int next[26]; 
    char wei[26];//在相應的 樹尾 上加一個尾巴!
    void init()
    {
        memset(next,-1,sizeof(next));
    }
} t[maxn];
int cur=1;
void creat(char ss[],int len,char ci[])
{
    int p=0;
    for(int i=0; i<len; i++)
    {
        int x=ss[i]-‘a‘;
        if(t[p].next[x]==-1)
        {
            t[cur].init();
            t[p].next[x]=cur++;
        }
        p=t[p].next[x];
    }
    strcpy(t[p].wei,ci);
}
void cha(char ss[])
{
    int p=0,i=0;
    while(ss[i])
    {
        int x=ss[i]-‘a‘;
        if(t[p].next[x]==-1)
        {
            cout<<"eh"<<endl;
            return ;
        }
        p=t[p].next[x];
        i++;
    }
    cout<<t[p].wei<<endl;
}
int main()
{
    t[0].init();//必須初始化!
    char str1[2013],str2[2014];
    while(gets(str1))
    {
        if(!strlen(str1))
            break;
        char qian[2013],hou[2014];
        int p=0;
        while(str1[p]!=‘ ‘)
        {
            qian[p]=str1[p];
            p++;//把前面的單詞提取出來!

} qian[p]=‘\0‘; int cnt=0; for(int i=p+1; i<strlen(str1); i++) hou[cnt++]=str1[i];//提取後面的單詞!

hou[cnt]=‘\0‘; creat(hou,strlen(hou),qian); } while(gets(str2)!=NULL) cha(str2); return 0; }



poj-2503-Babelfish