【题解】【排序】—— [NOIP1998 提高组] 拼数

news2024/9/23 16:19:39

【题解】【排序】—— [NOIP1998 提高组] 拼数

  • [NOIP1998 提高组] 拼数
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例
      • 输入 #1
      • 输出 #1
      • 输入 #2
      • 输出 #2
    • 提示
  • 1.题意解析
  • 2.AC代码

[NOIP1998 提高组] 拼数

题目描述

设有 n n n 个正整数 a 1 … a n a_1 \dots a_n a1an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。

输入格式

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

第二行有 n n n 个整数,表示给出的 n n n 个整数 a i a_i ai

输出格式

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

输入输出样例

输入 #1

3
13 312 343

输出 #1

34331213

输入 #2

4
7 13 4 246

输出 #2

7424613

提示

对于全部的测试点,保证 1 ≤ n ≤ 20 1 \leq n \leq 20 1n20 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1ai109

NOIP1998 提高组 第二题

1.题意解析

    首先,考虑到这题需要拼接数字,直接想到用字符串存储数字。

    那这道题就被简化成了如何排序字符串,使其组合出来的数最大。大部分同学(包括我)会写出这样的代码。

bool cmp(string a,string b)
{
    if(a.size()==b.size())
        return a>b;
    return a.size()>b.size();
}

但只需要带入一组数据:

2
9 11

得到119,而最优解是911

    那该怎么办呢?难道要逐位比较字符串的数字大小吗?这样太麻烦了。我们可以这样写:

bool cmp(string x,string y)
{
    return x+y>y+x;
}

    这是什么意思呢?在字符串中,+是拼接的意思。例如"abc"+"edf"="abcdef"。这个语句的意思就是,x后面拼接yy后面拼接x要大,那么按x y的顺序排列,否则按y x的顺序排列。

    例如,对于12319。调用cmp函数,得到两个拼接后的字符串:1231919123。通过比较得知,"12319"<"19123",经过排序后,得到"19123"

    再根据数学归纳法,每一次这样的交换都是局部最优解,合起来自然就变成了全局最优解。

    如果想看详细证明,可以点这。

2.AC代码

#include<bits/stdc++.h>
using namespace std;
bool cmp(string x,string y)//重点部分
{
    return x+y>y+x;
}
int main()
{
    int n;
	string a[30];//定义字符串数组存储数字 
	cin>>n;
	for(int i=1;i<=n;i++)
	    cin>>a[i];
	sort(a+1,a+n+1,cmp);//排序 
	for(int i=1;i<=n;i++)
	    cout<<a[i];
	return 0;
}

喜欢就订阅此专辑吧!

【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。

欢迎扫码关注蓝胖子编程教育
在这里插入图片描述

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

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

相关文章

第41篇 使用数码管实现计数器<二>

Q&#xff1a;如何设计汇编语言程序实现手动控制计数器&#xff1f; A&#xff1a;在本实验程序中&#xff0c;使用轮询法读取Data寄存器获取KEY的状态&#xff0c;当未按下任何KEY时&#xff0c;Data寄存器中的值为0&#xff0c;当按下按键KEY[i]时&#xff0c;Data寄存器中…

Circuitjs 创建自定义逻辑(Custom Logic)器件

您可以使用 自定义逻辑芯片 来实现自己的简单逻辑器件. 位于“菜单–绘制–数字芯片–添加自定义逻辑”下, 或者是"右键–数字芯片–添加自定义逻辑". 视频简介: Circuitjs 自定义逻辑电路(custom logic)功能简介 一个具体示例 来看一个具体的示例, 通过它来讲述 自…

【案例56】安全设备导致请求被拦截

问题现象 访问相关报表 第二次访问发现有相关的连接问题 问题分析 服务器访问相关节点&#xff0c;发现相关节点无此问题。从客户的客户端访问缺有问题。在nclog中发现如下日志&#xff0c;链接被重置。 直接访问服务器无丢包现象。客户端未开防火墙。装了杀毒软件已经卸载。…

vue3 实现历史步骤记录

通过vueuse中的 useManualRefHistory&#xff0c;快速实现历史操作记录 所需环境&#xff1a; vue 实现目标 历史记录撤销重做记录覆盖 代码原理 把键盘监听事件挂载在document上&#xff0c;当键盘事件发生时&#xff0c;依次匹配事先订阅的快捷键/单按键事件&#xff0c…

在定义的接口前加前缀路径

前因 在一个服务中&#xff0c;既定义了app端接口&#xff0c;又定义了pc端接口&#xff0c;为了方便区分&#xff0c;可以在项目里建立一个名为"app"、"pc"的文件夹&#xff0c;分别为app、pc提供接口。当app和pc接口一致时&#xff0c;写完一端接口后&a…

Axure设计之动态条形图教程(中继器)

在Axure RP中&#xff0c;中继器是一个非常强大的工具&#xff0c;它允许我们动态地展示数据&#xff0c;并且可以轻松实现复杂的交互效果。本文将详细介绍如何使用中继器来制作一个动态条形图&#xff0c;并展示其在实际项目中的应用。 一、效果预览 预览地址&#xff1a;http…

BC131 矩阵相等判定(c语言)

1.描述 :KiKi得到了两个n行m列的矩阵&#xff0c;他想知道两个矩阵是否相等&#xff0c;请你回答他。 (当两个矩阵对应数组元素都相等时两个矩阵相等)。 // //输入描述&#xff1a; //第一行包含两个整数n和m&#xff0c;表示两个矩阵包含n行m列&#xff0c;用空格分隔。 // //…

深刻理解JDK中线程池的使用

一、线程池状态 线程结构关系 ThreadPoolExecutor使用int的高3位来表示线程池状态,低29位标识线程数量. 注意 : 第一位为符号位,所以RUNNING状态为负数,最小. 这些信息存储在一个原子变量ctl中,目的是将线程池状态与线程个数合二为一,这样就可以用一次cas原子操作进行赋值. /…

如何从零编程实现《黑神话:悟空》

随着游戏行业的不断发展&#xff0c;越来越多的技术被应用于游戏的开发之中。其中&#xff0c;《黑神话&#xff1a;悟空》作为一款备受期待的动作冒险游戏&#xff0c;不仅以其精美的画面和丰富的剧情吸引了无数玩家的关注&#xff0c;还因其背后的技术实现了独特的游戏体验。…

怎么生成一个springboot的项目

这个很简单,只是想记录一下使用springboot的创建工具去创建项目 创建完成之后,删除一些不必要的东西 确认springboot的版本号,我这里要用2.4.0 刷新一下maven,等待下载完成就完成了

T6:好莱坞明星识别

文章目录 **T6周&#xff1a;好莱坞明星识别****一、前期工作**1.设置GPU&#xff08;用CPU可忽略该步骤&#xff09;2.导入数据3.查看数据 **二、数据预处理**1.加载数据2.可视化数据3.配置数据集 **三、构建CNN网络模型****四、编译模型****五、训练模型****六、模型评估****…

Circuitjs 分支电路(子电路, subcircuit)功能简介

在 circuitjs 中, 可以使用 分支电路 来实现自定义的"黑盒"器件. 分支电路 也称为 子电路(subcircuit). 因为菜单上已经叫成了 分支电路, 以下均称为 分支电路. 通过分支电路, 可以实现对电路的封装与抽象, 从而达到模块化并简化电路的目的. 更进一步的, 被抽象的黑盒…

Apache Paimon V0.9最新进展

摘要&#xff1a;本文整理自 Paimon PMC Chair 李劲松老师在 8 月 3 日 Streaming Lakehouse Meetup Online&#xff08;Paimon x StarRocks&#xff0c;共话实时湖仓架构&#xff09;上的分享。主要分享 Apache Paimon V0.9 的最新进展以及遇到的一些挑战。 一、Paimon&#x…

无人系统特刊合集(二)丨Springer特刊推荐

期刊推荐 期刊征稿&#xff1a;JOURNAL OF INTELLIGENT & ROBOTIC SYSTEMS Journal of Intelligent & Robotic Systems是一本同行评议的期刊&#xff0c;致力于智能系统和机器人技术的理论和实践。 专注于无人系统、机器人和自动化以及人机交互等领域。 在每期中都包…

天猫 登录滑块 淘系滑块分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关 前言 玩了几天现在才有空研究轨迹直接用了之前的…

日志组件导致的内存溢出问题分析

1、 内存溢出日志 普通的http请求&#xff0c;导致堆内存直接溢出&#xff0c;看了下代码实现非常简单的一次DB查询且数据量也比较小&#xff0c;不可能导致内存溢出呢 java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:3332) at…

网上花店设计+vue

TOC ssm017网上花店设计vue 绪论 1.1 选题背景 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。计算机软件可以针对不同行业的营业特点以及管理需求&a…

CSS3页面布局-三栏-中栏流动布局

三栏-中栏流动布局 用负外边距实现 实现三栏布局且中栏内容区不固定的核心问题就是处理右栏的定位&#xff0c; 并在中栏内容区大小改变时控制右栏与布局的关系。 控制两个外包装容器的外边距&#xff0c;一个包围三栏&#xff0c;一个包围左栏和中栏。 <!DOCTYPE html&…

计算机毕业设计 在线问诊系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

海运整箱成本与拼箱成本对比 | 国际贸易服务平台 | 箱讯科技

整箱和拼箱 在集装箱运输业务中&#xff0c;我们把一个集装箱、一个出口人、一个收货人、一个目的港&#xff0c;满足这“四个一”条件的货物叫做整箱货&#xff0c;而把一个集装箱、出口人、收货人和目的港这三项之中只要有一项是在两个或两个以上的出口运输货物&#xff0c;就…