专栏文章
题解:P1012 [NOIP 1998 提高组] 拼数
P1012题解参与者 8已保存评论 8
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @miog4tz9
- 此快照首次捕获于
- 2025/12/02 18:39 3 个月前
- 此快照最后确认于
- 2025/12/02 18:39 3 个月前
Solution
用通俗的语言解释一下这个题是怎么回事。
将题目中的数看作字符串, 表示 两个字符串的拼接, 表示 的字典序比 小。
我们定义 比 优,当且仅当 。
我们想要说明,如果 比 优, 比 优,则 比 优:
- 设 分别为 这三个字符串表示的数, 表示 的长度。
- 等价于 ,这也等价于 。
- 那么我们知道 ,,那么当然有 ,也就是说 比 优了。
那么这个比较就具有了传递性!
我们发现,对于相邻的 ,如果 比 优,那么交换 后答案更加大。
对于一种连接方式,一直交换这样的相邻串,最后得到的串就是从优到劣排序后的连接方式(根据传递性)。那么所有连接方式的答案都不会比排序后的答案更大,因此最优解就是从优到劣排序啦!
直接定义自定义比较函数
cmp,然后使用 sort 排序即可。Code
CPP#include <bits/stdc++.h>
using namespace std;
string s[50];
int n;
bool cmp(string A, string B) {
return A + B > B + A;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i ++)
cin >> s[i];
sort(s + 1, s + 1 + n, cmp);
for (int i = 1; i <= n; i ++)
cout << s[i];
return 0;
}
相关推荐
评论
共 8 条评论,欢迎与作者交流。
正在加载评论...