题解:AT_past202012_d リーディングゼロ
__owowow__ · · 题解
AT_past202012_d リーディングゼロ 题解
atcoder 传送门
洛谷传送门
题目大意
给定
题目思路
就是字符串排序,详情看代码吧,注释很清楚。
Code
#include <bits/stdc++.h> // 引入所有标准库
using namespace std;
int n; // 存储输入的字符串数量
string s[100010]; // 用于存储字符串的数组,最大长度为100010
// 自定义比较函数,用于字符串排序
bool cmp(string a, string b) {
int alen = a.size(), blen = b.size(); // 获取两个字符串的长度
int maxx = max(alen, blen); // 确定二者长度中的最大值
// 将较短的字符串前面补零,使其与较长的字符串长度一致
for (int i = 0; i < maxx - alen; i++) a = '0' + a; // 为字符串 a 前面补零
for (int i = 0; i < maxx - blen; i++) b = '0' + b; // 为字符串 b 前面补零
// 比较补零后的字符串,如果不同则按字典序比较,如果相同则按长度比较
return a != b ? a < b : alen < blen;
}
int main() {
cin >> n; // 输入字符串的数量
for (int i = 1; i <= n; i++) cin >> s[i]; // 输入每个字符串
// 对字符串数组进行排序,使用自定义比较函数 cmp
sort(s + 1, s + n + 1, cmp);
// 输出排序后的字符串
for (int i = 1; i <= n; i++) cout << s[i] << '\n';
return 0; // 程序结束
}