NC16783 [NOIP1998]拼数

题目

题目描述

设有 n 个正整数(n20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3 时,3 个整数 13312343 联接成的最大整数为:34331213
又如:n=4 时,4 个整数 7134246 联接成的最大整数为:7424613

输入描述

第一行,一个正整数 n
第二行,n 个正整数。

输出描述

一个正整数,表示最大的整数

示例1

输入

3
13 312 343

输出

34331213

题解

知识点:贪心,排序。

显然,根据字典序排列数字是最优的。但问题在于一些包含关系的数字是不符合的,如 9899899 并不能单纯看字典序。

考虑看前后两者的和字符串的字典序排序,首先如果两者并不是包含关系,则这种排序不会因此改变;如果两者是包含关系可以用这种方法更进一步排序,注意这里传递性是要证明的,具体用数学归纳法即可。

时间复杂度 O(n)

空间复杂度 O(n)

代码

#include <bits/stdc++.h>
using namespace std;
string str[27];
bool cmp(string a,string b){
return a+b>b+a;
}
int main(){
int n;
cin>>n;
for(int i = 0;i<n;i++){
cin>>str[i];
}
sort(str,str+n,cmp);
for(int i = 0;i<n;i++){
cout<<str[i];
}
cout<<'\n';
return 0;
}
posted @   空白菌  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示