sicily 1198

来源:互联网 发布:虚拟货币交易平台源码 编辑:程序博客网 时间:2024/06/01 09:50


本来应该算是一道不难的题目吧,但是却走进了误区。一直以为对输入的所有字符串排序一下就可以了,按字典排序小的排前面,也就是直接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;}   


0 0