UVA 10391(把符合单词输出,map)

来源:互联网 发布:华夏名网域名注册 编辑:程序博客网 时间:2024/06/06 14:12

Compound Words

   Time Limit: 3000ms                        Memory Limit: 131072KB

[PDF Link]

Problem E: Compound Words

You are to find all the two-word compound words in a dictionary. A two-word compound word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.

Input

Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 120,000 words.

Output

Your output should contain all the compound words, one per line, in alphabetical order.

Sample Input

aalienbornlesslienneverneverthelessnewnewbornthezebra

Sample Output

aliennewborn

题目大意:

给你一些字典里面的词语,输出有其中两个单词可以复合的复合单词。

解题思路:

输入时已经是字典序,输出不用再排顺序。


代码:

#include<iostream>#include<cstdio>#include<string>#include<map>using namespace std;const int maxn = 120010;string str[maxn],str1,str2;map <string,int> mymap;int r = 0;void input(){    while(cin>>str[r++]){        mymap[str[r-1]]=2;//也可以为别的数    }}void solve(){    for(int i=0;i<r;i++){        str1.clear();        str2.clear();        for(int j=0;j<str[i].length();j++){            str1+=str[i][j];            if(mymap[str1]==2){                str2=&str[i][j+1];                if(mymap[str2]==2){                    cout<<str[i]<<endl;                    break;                }            }        }    }}int main(){    input();    solve();    return 0;}


0 0