题目
题解
贪心。
重点是如何排序。
因为排序函数cmp只需要考虑两个字符串的顺序关系,因此我们可以尝试将两个字符串按不同顺序拼起来,比较大小,返回字典序小的那种情况的顺序。
我写了个很复杂的排序函数,其实还是没有考虑到排序函数本质就是只考虑局部排序,所以写该函数的时候我们也不必考虑过多,只考虑两个字符串的位置关系即可。
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+10;
int n;
string a[N];
bool cmp (string s1, string s2) {
return s1+s2 < s2+s1;
}
int main()
{
cin >> n;
for (int i = 0;i < n;i ++) cin >> a[i];
sort (a, a+n, cmp);
int flag = 0;
for (int i = 0;i < n;i ++) {
if (flag) cout << a[i];
else {
int j = 0;
while (j < a[i].size() && a[i][j] == '0') j ++;
if (j == a[i].size()) continue;
cout << a[i].substr (j);
flag = 1;
}
}
if (!flag) cout << 0 << endl; // 一个测试点
return 0;
}