本来应该算是一道不难的题目吧,但是却走进了误区。一直以为对输入的所有字符串排序一下就可以了,按字典排序小的排前面,也就是直接x1<x2,却总是WA。
后来终于发现了问题:如果就只是对单个字符数组排序的话,ss和ssa毫无疑问会变成ssssa(因为在strcmp函数中ss肯定要小于ssa)。
但是我们实际要的是组合后的字典排序最小,所以应该是ssass。
所以说到底,还是得注意组合这两个字,先组合,后排序比直接排序要来得靠谱!
也就是比较的时候得x1+x2<x2+x1
最终代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(const string &x1,const string &x2)
{
return x1+x2 < x2+x1;
}
int main(void)
{
int t;
cin >> t;
while(t--)
{
string s[10];
int n;
cin >> n;
for(int i=0; i < n; i++)
{
cin >> s[i];
}
sort(s,s+n,cmp);
for(int i=0; i < n; i++)
{
cout << s[i];
}
cout << endl;
}
return 0;
}