codeforces 499B Lecture(map与string简单用法)

B. Lecture
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

You have a new professor of graph theory and he speaks very quickly. You come up with the following plan to keep up with his lecture and make notes.

You know two languages, and the professor is giving the lecture in the first one. The words in both languages consist of lowercase English characters, each language consists of several words. For each language, all words are distinct, i.e. they are spelled differently. Moreover, the words of these languages have a one-to-one correspondence, that is, for each word in each language, there exists exactly one word in the other language having has the same meaning.

You can write down every word the professor says in either the first language or the second language. Of course, during the lecture you write down each word in the language in which the word is shorter. In case of equal lengths of the corresponding words you prefer the word of the first language.

You are given the text of the lecture the professor is going to read. Find out how the lecture will be recorded in your notes.

Input

The first line contains two integers, n and m (1 ≤ n ≤ 30001 ≤ m ≤ 3000) — the number of words in the professor's lecture and the number of words in each of these languages.

The following m lines contain the words. The i-th line contains two strings aibi meaning that the word ai belongs to the first language, the word bi belongs to the second language, and these two words have the same meaning. It is guaranteed that no word occurs in both languages, and each word occurs in its language exactly once.

The next line contains n space-separated strings c1, c2, ..., cn — the text of the lecture. It is guaranteed that each of the strings cibelongs to the set of strings {a1, a2, ... am}.

All the strings in the input are non-empty, each consisting of no more than 10 lowercase English letters.

Output

Output exactly n words: how you will record the lecture in your notebook. Output the words of the lecture in the same order as in the input.

Sample test(s)
input
4 3
codeforces codesecrof
contest round
letter message
codeforces contest letter contest
output
codeforces round letter round
input
5 3
joll wuqrd
euzf un
hbnyiyc rsoqqveh
hbnyiyc joll joll euzf joll
output
hbnyiyc joll joll un joll
大致题意:就是给你m行,然后每一行有两个不超过十个字符仅由小写字母组成的单词,之后再在m行后输入n个单词,占用一行,然后输出最后一行的每个单词各自所在的那一行较短的单词,中间空格隔开,保证每个单词都不相同。看到这个题目,第一想到用map来写,之后还会用到string ,这样这道题 就十分简单了
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <map>
using namespace std;
int main()
{
    map<string,string>mp;       //定义map,因为要输出字符串,所以直接两个都是string类型
    int n,m;
    while (~scanf("%d%d",&n,&m ) )
    {
        for (int i = 0 ; i < m ; i++ )
        {
            string a,b;
            cin >> a >> b;
            if (a.size() <= b.size())       //比较单词长短
            {
                mp[a] = a;          //全部赋值
                mp[b] = a;
            }
            else 
            {
                mp[a] = b;
                mp[b] = b;
            }
        }
        for (int i = 0 ; i < n ; i++ )
        {
            string a;
            cin >> a;
            if ( i != n-1)          //输出
            {
                cout <<mp[a]<<" ";
            }
            else 
            {
                cout << mp[a] <<endl;
            }
        }
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值