HDU - 1075 What Are You Talking About

传送门

问题描述:

Ignatius is so lucky that he met a Martian yesterday. But he didn’t know the language the Martians use. The Martian gives him a history book of Mars and a dictionary when it leaves. Now Ignatius want to translate the history book into English. Can you help him?

输入说明:

The problem has only one test case, the test case consists of two parts, the dictionary part and the book part. The dictionary part starts with a single line contains a string “START”, this string should be ignored, then some lines follow, each line contains two strings, the first one is a word in English, the second one is the corresponding word in Martian’s language. A line with a single string “END” indicates the end of the directory part, and this string should be ignored. The book part starts with a single line contains a string “START”, this string should be ignored, then an article written in Martian’s language. You should translate the article into English with the dictionary. If you find the word in the dictionary you should translate it and write the new word into your translation, if you can’t find the word in the dictionary you do not have to translate it, and just copy the old word to your translation. Space(’ ‘), tab(’\t’), enter(’\n’) and all the punctuation should not be translated. A line with a single string “END” indicates the end of the book part, and that’s also the end of the input. All the words are in the lowercase, and each word will contain at most 10 characters, and each line will contain at most 3000 characters.

输出说明:

In this problem, you have to output the translation of the history book.

思路:

题目就让我们让把“火星文”翻译成英语,正式的输入从一个START开始,接下来的每一行,都有两个字符串,全面的是英文,以一个END结束输入,再以一个START开始输入要翻译的内容,最后以一个END结束输入。代码实现是通过建立一个string和string的map数组,后面将火星文与英语单词进行对应,在输入需要翻译的内容时,直接在map中查找key,输出对应的value。特别注意!火星文题目有提示huge input,不能使用cin,cout要使用scanf和printf,或者使用std::ios::sync_with_stdio(0);解绑

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    
    
    string a,b;
    map<string,string> mp;
    cin>>a;
    while(cin>>a&&a!="END")
    {
    
    
        cin>>b;
        mp[b]=a;
    }
    cin>>a;
    getchar();
    char ch[3005];
    while(1)
    {
    
    
        gets(ch);
        int i,len;
        if(strcmp(ch,"END")==0)
        {
    
    
             break;

        }
        len=strlen(ch);
        b="";
        for(i=0; i<len; i++)
        {
    
    
            if(ch[i]<'a'||ch[i]>'z')
            {
    
    
                if(mp[b]!="")
                    cout<<mp[b];
                else
                    cout<<b;
                b="";
                cout<<ch[i];
            }
            else
                b+=ch[i];
        }
        cout<<endl;
    }
    return 0;
}



猜你喜欢

转载自blog.csdn.net/m0_51727949/article/details/114641446
今日推荐