Compound Words(复合词) UVA 10391

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 00:01   733   0

解题思路:这道题开始考虑通过合成单词来做,结果超时(复杂度n*n);后面考虑通过分解单词来做(复杂度n*m(m表示单词平均长度))AC了,需要用到string中的分解函数substr(可以在STL中查询)


  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. #include<set>
  5. using namespace std;
  6. vector<string>vec; //通过下标遍历输入的单词
  7. set<string>set1; //用于保存输入的单词
  8. set<string>set2; //用于保存输出的单词
  9. int main(){
  10. string str;
  11. while(cin>>str){
  12. set1.insert(str);
  13. vec.push_back(str);
  14. }
  15. for(int i=0;i<vec.size();i++){
  16. string s1,s2;
  17. if(vec[i].size()>1){
  18. for(int j=0;j<vec[i].size()-1;j++){
  19. s1=vec[i].substr(0,j+1);
  20. s2=vec[i].substr(j+1);
  21. if(set1.count(s1) && set1.count(s2))set2.insert(vec[i]); //当分解成两份后的单词满足条件时,插入到输出集合中
  22. }
  23. }
  24. }
  25. for(set<string>::iterator iter=set2.begin();iter!=set2.end();iter++){
  26. cout<<*iter<<endl;
  27. }
  28. return 0;
  29. }

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP