sicily 1198 Substring 解题总结
summary
:
一看题目,总觉得直接sort就可以A了,但是交上去就是WA,无奈之下,只好google一下 偷看一下人家的分析。。。。。。。果然是有特殊情况!比如 dc dcc,直接sort,得到 的是dcdcc,而正确答案是dccdc,于是要自己写比较函数了!!
代码:
#include <iostream>
#include <string>
using namespace std;
bool cmp(string s1,string s2)
{
int i,j;
for(i = j = 0; i < s1.size() && j < s2.size(); i++,j++){
if(s1[i] > s2[j])
return false;
else if(s1[i] < s2[j])
return true;
}
if(i == s1.size() && j == s2.size())
return false;
else if(i == s1.size() || j == s2.size()){
if(s1+s2 < s2+s1)
return true;
else
return false;
}
}
int main()
{
int t,n,i,j,k;
string s[100];
cin >> t;
while(t--){
cin >> n;
for(i = 0; i < n; i++){
cin >> s[i];
}
for(i = 0; i < n - 1; i++){
k = i;
for(j = i + 1; j < n; j++){
if(cmp(s[j],s[k]))
k = j;
}
if(k != i){
string temp = s[i];
s[i] = s[k];
s[k] = temp;
}
}
for(i = 0; i < n; i++){
cout << s[i];
}
cout << endl;
}
return 0;
}