二进制王国
题目链接
https://www.lanqiao.cn/problems/17035/learning/?contest_id=177
题目描述
思路
这里就要灵活理解字典序排列,虽然string
内置可以直接比较字符串字典序,但是在拼接时比较特殊,比如
11
的字典序小于110
,但是11110
排列大于11011
,不可以偏概全,故我们可以想到换种比较方式,用拼接的结果来比较:
按照正常sort的逻辑,加以修改,比较
s1 + s2
所得的字典序和s2 + s1
所得的字典序,重构sort
函数,具体如下
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 2e5 + 10;
bool cmp(string &s1, string &s2) { //重构比较函数
return s1 + s2 < s2 + s1;
}
int main() {
int n;
cin >> n;
vector<string> s(n + 1); //这里防止题目所给数据空间开爆,用变长数组
for(int i = 0; i < n; i++)
cin >> s[i];
sort(s.begin(), s.end(), cmp);
for(auto str : s)
cout << str;
return 0;
}