暑假集训第三周 STL S - Hat’s Words 合并单词


S - Hat’s Words
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit  Status

Description

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

Input

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

Output

Your output should contain all the hat’s words, one per line, in alphabetical order.
 

Sample Input

      
      
      
      
a ahat hat hatword hziee word
 

Sample Output

      
      
      
      
ahat hatword

分析:

别人的代码,感觉用到了好多我不会的东西,好烦啊!!!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <algorithm>
#include <map>
#include<vector>
#include<set>
#include <cstdio>
#include <string>
#include <string.h>
using namespace std;
int main()
{
    string str;
   vector<string>buf;
   set<string>dict;
   map<string,int >cnt;
  while(cin>>str)
  {
      cnt[str]=1;
      buf.push_back(str);
  }
  for(int i=0;i<buf.size();i++)
  {
      string str2;
      for(int j=0;j<buf[i].size()-1;j++)
      {
          str2+=buf[i][j];
          if(cnt.count(str2)&&cnt.count(buf[i].substr(j+1,buf[i].size()-j-1)))
          {
              dict.insert(buf[i]);
              break;
          }
      }
  }
  for(set<string>::iterator it=dict.begin();it!=dict.end();it++)
    cout<<*it<<endl;
    return 0;
}

你可能感兴趣的:(vector,map,set)