P1012 [NOIP1998 提高组] 拼数题解

news2024/11/16 6:04:11

题目

设有n个正整数a_{1},a_{2},\cdots ,a_{n},将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。

输入输出格式

输入格式

第一行有一个整数,表示数字个数n。

第二行有n个整数,表示给出的n个整数a_{i}

输出格式

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

输入输出样例

输入样例

3
13 312 343

输出样例

34331213

代码

#include<iostream>
#include<algorithm>
using namespace std;
struct node{
	string s;
}a[25];
int n;
bool cmp(node x,node y){
	if(x.s+y.s>y.s+x.s){
		return 1;
	}
	return 0;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].s;
	}
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++){
		cout<<a[i].s;
	}
	return 0;
}

解析

我们先定义几个符号,ab(a,b是数字字符串)表示a+b也就是把a和b连起来写

abc(a,b,c都是数字符串)(当然再多几个字符串也没关系,跟上面一个意思)

a⩾b 表示正常的a大于等于b
a>=b a,b是数字字符串 表示a+b⩾b+a    注意区分这两个大于等于!

a*n a是数字字符串,n是正整数,表示把a连续写n遍形成的很长的字符串

下面开始证明。

从代码中可以看出,我们把a数组按这个 >= 符号降序排好序,再直接输出就是正确的答案了。容易发现,对于任意一种排列方式,只要相邻的两个数满足前面的>=后面的,那么这种排列肯定不是最优的。也就是说,对于最优排列,肯定有第一个串>=第二个串,第二个串>=第三个串,第三个串>=第四个串 ... 依此类推。

经过这一些简单的推理,证明的思路实际上很清晰了:只需要再证明传递性(由a>=bb>=c 能否推出a>=c)。这是最后的一步,也是关键的一步。

先证明一个性质: 如果a>=b,那么a*n>= b。 (思路:递推/数学归纳法)

a>=b即ab⩾ba,可知aab⩾aba并且aba⩾baa,从而aab⩾baa也就是a*2>=b

a*2>=b即aab⩾baa 又由ab⩾ba,可知aaab⩾abaa并且abaa⩾baaa

从而aaab⩾baaa,也就是 a*3>=b,依此类推,便能证得a*n>=b
类似地,由a>=b,也可以得到a>=b*n。 相反,如果a*n>=b或者a>=b*n,也能得到 a>=b

有了这个结论,我们只要a,b,c各乘上一个合适的整数,不难证明传递性了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1420202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

导出Mysql数据库表名和字段并合并成一个word

参考链接&#xff1a; 导出MySQL数据库所有库和字段注释及相关信息为word文档——工具类 java - Apache POI - How to copy tables from one docx to another docx - Stack Overflow 领导让我研究下一个低代码平台的代码&#xff0c;我就想着做一个把数据库字段直接导出来的…

【算法专题】贪心算法

贪心算法 贪心算法介绍1. 柠檬水找零2. 将数组和减半的最少操作次数3. 最大数4. 摆动序列(贪心思路)5. 最长递增子序列(贪心算法)6. 递增的三元子序列7. 最长连续递增序列8. 买卖股票的最佳时机9. 买卖股票的最佳时机Ⅱ(贪心算法)10. K 次取反后最大化的数组和11. 按身高排序12…

关于Spring Boot和MyBatis常见的十道面试题

拦截器和过滤器有什么区别&#xff1f; 拦截器&#xff08;Interceptor&#xff09;和过滤器&#xff08;Filter&#xff09;都是用于在请求道道目标资源的之前或之后进行处理的组件。主要区别有以下几点&#xff1a; 依赖对象不同&#xff1a;过滤器是来时Servlet&#xff0…

蓝桥杯2024/1/28----十二届省赛题笔记

题目要求&#xff1a; 2、 竞赛板配置要求 2.1将 IAP15F2K61S2 单片机内部振荡器频率设定为 12MHz。 2.2键盘工作模式跳线 J5 配置为 KBD 键盘模式。 2.3扩展方式跳线 J13 配置为 IO 模式。 2.4 请注意 &#xff1a; 选手需严格按照以上要求配置竞赛板&#xff0c;编写和调…

【JS逆向实战-入门篇】某gov网站加密参数分析与Python算法还原

文章目录 1. 写在前面2. 请求分析3. 断点分析4. 算法还原 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

Unity 观察者模式(实例详解)

文章目录 简介示例1 - 简单的文本更新通知示例2 - 多观察者监听游戏分数变化示例3 - 事件系统实现观察者模式示例4 - 泛型观察者和可序列化的事件系统示例5 - 使用C#委托简化版 简介 在Unity中实现观察者模式&#xff0c;我们可以创建一个Subject&#xff08;目标/主题&#x…

【Vue.js设计与实现】第一篇:框架设计概览-阅读笔记(持续更新)

从高层设计的角度去探讨框架需要关注的问题。 参考&#xff1a;速读《Vue.js 设计与实现》 - 掘金 (juejin.cn) 系列目录&#xff1a; 标题博客第一篇&#xff1a;框架设计概览【Vue.js设计与实现】第一篇&#xff1a;框架设计概览-阅读笔记第二篇&#xff1a;响应系统【Vue.…

代码随想录算法训练营29期|day34 任务以及具体任务

第八章 贪心算法 part03 1005.K次取反后最大化的数组和 class Solution {public int largestSumAfterKNegations(int[] nums, int K) {// 将数组按照绝对值大小从大到小排序&#xff0c;注意要按照绝对值的大小nums IntStream.of(nums).boxed().sorted((o1, o2) -> Math.ab…

c++学习记录 文件操作—文本文件—读文件

#include<iostream> using namespace std; #include<fstream> #include<string>void test01() {//创建流对象ifstream ifs;//打开文件&#xff0c;并且判断是否打开成功ifs.open("test.txt", ios::in);if (!ifs.is_open()){cout << "文…

39种值得关注的利基AI应用【2024】

人工智能非常令人兴奋。 潜在的应用数量如此巨大&#xff0c;而且这个空间正在以光速发展。 由于步伐轻快&#xff0c;听到该技术正在堵塞所有不同的漏洞就像开车穿过乡村小镇向窗外看一样。 你捕捉到了大部分重要的东西&#xff0c;但许多独特的魅力和隐藏的宝石却被忽视了。…

GM/T 0018-2012 设备接口描述笔记

GM/T 0018-2012 设备接口描述笔记 文章目录 GM/T 0018-2012 设备接口描述笔记6. 设备接口描述6.1 密码设备应用接口在公钥密码基础设施应用技术体系框架中的位置6.2 设备管理类函数6.3 密钥管理类函数6.4 非对称算法运算类函数6.5 对称算法运算类函数6.6 杂凑运算类函数6.7 用户…

揭秘 Docker 网络:手动实现 Docker 桥接网络

本文将带领读者探索 Docker 桥接网络模型的内部机制&#xff0c;通过 veth pair、bridge、iptables 等关键技术手动实现 Docker 桥接网络模型&#xff0c;揭示网络背后的运作原理。 如果你对云原生技术充满好奇&#xff0c;想要深入了解更多相关的文章和资讯&#xff0c;欢迎关…

idea用version标签配置版本号报错版本号missing

问题描述&#xff1a; 用<mybatis-plus.version>3.3.2</mybatis-plus.version>配置pom的版本号&#xff0c;报错 dependencies.dependency.version for com.baomidou:mybatis-plus-boot-starter:jar is missing. line 33, column 21详细报错如下&#xff1a; 详…

负载均衡下Webshell连接思路及难点

君衍. 一、应用场景二、环境搭建三、思路以及难点1、查看内部结构2、查看webshell3、使用蚁剑进行连接4、难点1 shell文件上传问题5、难点2 命令执行时飘逸6、难点3 大工具上传失败7、难点4 脚本失效 四、解决方式1、关闭对方节点服务器2、基于IP地址判断是否执行3、脚本实现流…

文献速递:人工智能医学影像分割--- 深度学习分割骨盆骨骼:大规模CT数据集和基线模型

文献速递&#xff1a;人工智能医学影像分割— 深度学习分割骨盆骨骼&#xff1a;大规模CT数据集和基线模型 我们为大家带来人工智能技术在医学影像分割上的应用文献。 人工智能在医学影像分析中发挥着至关重要的作用&#xff0c;尤其体现在图像分割技术上。这项技术的目的是准…

1 月 29日算法练习-二分法

二分法是一种高效的查找方法&#xff0c;它通过将问题的搜索范围一分为二&#xff08;两边具有明显的区别&#xff09;&#xff0c;迭代地缩小搜索范围&#xff0c;直到找到目标或确定目标不存在。 二分法适用于有序数据集合&#xff0c;并且每次迭代可以将搜索范围缩小一半。 …

STL_list

一、有关list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素。Ii…

备战蓝桥杯--数据结构及STL应用(基础)

今天轻松一点&#xff0c;讲一讲stl的基本操作吧&#xff01; 首先&#xff0c;让我们一起创建一个vector容器吧&#xff01; #include<bits/stdc.h> using namespace std; struct cocoack{ int coco,ck; } void solve(){vector<cocoack> x;for(int i0;i<5;i){…

负载均衡技术助力企业数字化转型和高可用架构实现

文章目录 什么是高可用架构什么是负载均衡负载均衡设备硬件负载均衡的代表产品软件负载均衡的代表产品 负载均衡基于OSI模型分层负载均衡在网络层负载均衡在传输层负载均衡在应用层 优先考虑负载均衡的场景硬件负载均衡的缺点云负载均衡正在成为最佳选择企业数字化转型对负载均…

Ubuntu 22.04 中文乱码解决方案

sudo apkg-reconfigure locales 按空格键选中