2011年11月11日星期五

POJ 1226 substrings


#include
#include
#include
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t --){
cin>>n;
int minsize = 101,min,len,i,j;
string s[101];
for(int i = 0;i < n;i ++){
cin>>s[i];
if(s[i].size() < minsize){minsize = s[i].size();min = i;}    //选最短字符串,从中取子串进行暴搜
}
for(len = minsize;len > 0;len --){     //从长取到短
for(i = 0;i + len <= minsize;i ++){
string subs = s[min].substr(i,len);    //子串
char tmp[101];
strcpy(tmp,subs.c_str());
string subr = _strrev(tmp);    //逆子串
for(j = 0;j < n;j ++)
if(s[j].find(subs) == string::npos && s[j].find(subr) == string::npos)break;
if(j == n){cout<
}
}
cout<<"0\n";
next:continue;
}
return 0;
}




这题开始没想到一个字母也算子串,白wa了一次 = =
网上的解题报告貌似有用kmp算法搜索和后缀数组的。喵的都没听过。可以好好看下- -!
用string类水过的题,不靠谱。。。。

没有评论:

发表评论