【UVA-10391】解题报告(STL)

原始题目

题目大意

给出一个字典,找出所有的复合单词,即恰好有两个单词连接而成的单词。
输入已按照字典序从小到大排序,且不超过120000个单词,输出所有复合词,按照字典序从小到大排序。

解题思路

substring秒过

解题代码

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
38
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <set>
#include <queue>
#include <algorithm>
#include <map>
#include <vector>
#include <iomanip>
#include <cmath>
using namespace std;

const int maxn=2e5+5;
set <string> s;
vector <string> all;
string a;
int n;
int main(){
while(cin>>a){
s.insert(a);
}
set <string> ::iterator it;
for(it=s.begin();it!=s.end();it++){
int len=(*it).size();
for(int i=1;i<len;i++){
//遍历每个单词从头到尾
string pre=(*it).substr(0,i);
string sub=(*it).substr(i,len-i);
if(s.count(pre) && s.count(sub)){
cout<<*it<<endl;
break;
}
}
}


}

收获与反思

  • 熟悉函数 string::substr() 第一个参数为起始位置,第二个参数为长度。