描述
将 01 串首先按长度排序,长度相同时,按 1 的个数多少进行排序,1 的个数相同时再按 ASCII 码值排序(字典序)。
输入
第一行输入一个整数 n (1≤n≤100),表示字符串的个数。
输入数据中含有一些 01 串,01 串的长度不大于 256 个字符。
输出
重新排列 01 串的顺序,使得串按基本描述的方式排序,然后依次输出。
样例
输入
6 10011111 00001101 1010101 1 0 1100
输出
0 1 1100 1010101 00001101 10011111
#include <bits/stdc++.h>
using namespace std;
string s[100000];
int ha(string s) {
int cnt = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '1') {
cnt++;
}
}
return cnt;
}
bool cmp(string a, string b) {
if (a.size() != b.size()) {
return a.size() < b.size();
}
int x, y;
x = ha(a);
y = ha(b);
if (x != y) {
return x < y;
}
return a < b;
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> s[i];
}
sort(s, s + n + 1, cmp);
for (int i = 1; i <= n; i++) {
cout << s[i] << endl;
}
return 0;
}