这道题的样例2比较坑,样例2是所有输入的数都为0,这个特例需要特殊判断,否则可能导致该样例的处理没有输出,导致错误。
#include<cstdio>
#include<vector>
#include<string>
#include<iostream>
#include<queue>
#include<set>
#include<algorithm>
#define maxn 22
typedef long long ll;
using namespace std;
vector<string> str;
bool compare(string a, string b) {
int la = a.size(), lb = b.size();
for (int i = 0; i < la && i < lb; i++) {
if (a[i] != b[i]) return a[i] < b[i];
}
if (la > lb) {
int j = lb;
while(j < la) {
if (a[j] != b[j % lb]) return a[j] < b[j % lb];
j++;
}
}
else if (la < lb) {
int j = la;
while(j < lb) {
if (a[j % la] != b[j]) return a[j % la] < b[j];
j++;
}
}
return true;
}
int main() {
int N;
string a;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
cin >> a;
str.push_back(a);
}
sort(str.begin(), str.end(), compare);
bool dz = true;
for (int i = 0; i < str.size(); i++) {
for (int j = 0; j < str[i].size(); j++) {
if (str[i][j] != '0') dz = false;
if (dz == true && str[i][j] == '0') continue;
printf("%c", str[i][j]);
}
}
if (dz == true) printf("0");
printf("\n");
return 0;
}