首页 > 代码库 > UVA 10391(把符合单词输出,map)

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

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

a
alien
born
less
lien
never
nevertheless
new
newborn
the
zebra

Sample Output

alien
newborn

题目大意:

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

解题思路:

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


代码:

#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;
}


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