AC代码,不过这次做的时候碰到了很多次超时的问题,来说一下为什么超时:
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
set<string> ss;
string s1,s2,s3,s,s4;
int main()
{
while(cin>>s) ss.insert(s);
for(set<string>::iterator it=ss.begin();it!=ss.end();it++)
{
s1=*it;
for(int i=1;i<s1.length();i++)
{
s2=s1.substr(0,i);
s3=s1.substr(i);
if(ss.count(s2)&&ss.count(s3)) {cout<<s1<<endl;break;}
}
}
return 0;
}
1、输入可能造成的超时:
while(cin>>s) ss.insert(s);
这是我现在用的输入,之前用的输入是
while(getline(can,s)) ss.insert(s);
2、最主要的超时问题:find函数查找集合中元素的问题:
if(ss.count(s2)&&ss.count(s3)) {cout<<s1<<endl;break;}
这是现在我用的,之前用的是:
f(find(ss.begin(),ss.end(),s2)!=ss.end()&&find(ss.begin(),ss.end(),s3)!=ss.end()) {cout<<s1<<endl;break;}
find函数能用count代替的尽量代替
3、学到的substr()函数:
s2=s1.substr(0,i);
表示从0的位置截取出i个元素放入新的串里。
s3=s1.substr(i);
表示从i的位置截取到串的末尾放入新的串里。
4、注意:set不可以排序,内部就是默认的字典序