【洛谷 P1012】[NOIP1998 提高组] 拼数 题解(贪心算法+字典序排序)

news2024/11/25 1:12:51

[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

样例输入 #1

3
13 312 343

样例输出 #1

34331213

样例 #2

样例输入 #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


思路

比较函数 cmp 用于确保拼接后的数值最大。

当用下面这个函数直接比较 x 和 y 的字典序时,虽然能通过大部分样例,但是仍有少量测试点 WA。

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

为什么会这样呢?

举个例子:当有 32、321 这两个数字。

  1. 如果用 x > y 比较,即先比较再拼接,则 321 > 32,拼接后为 32132,但是显然 32132 < 32321,所以这样比较不对。

  2. 如果用 x + y > y + x 比较,即先拼接再比较,则 32321 > 32132,正确。

所以,对于两个字符串 x 和 y,如果 x+y 的字典序大于 y+x 的字典序,则认为 x 大于 y。得到比较函数 cmp 如下。

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

AC代码

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#define AUTHOR "HEX9CF"
using namespace std;

const int N = 107;

int n;
string s[N];

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

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> s[i];
    }
    sort(s + 1, s + n + 1, cmp);
    for (int i = 1; i <= n; i++)
    {
        cout << s[i];
    }
    cout << endl;
    return 0;
}

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

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

相关文章

mac 安装 selenium + chrome driver

前言 使用 selenium 模拟浏览器渲染数据&#xff0c;需要依赖各浏览器的驱动才能完成&#xff0c;因此需要单独安装chrome driver 查看本地 chrome 浏览器的版本 可以看到我这里已经是 arm 架构下最新的版本了 下载对应的 chrome driver 访问下面的地址&#xff1a; Chrome…

集合贴3——智能客服系统

基础课17——智能客服系统-CSDN博客文章浏览阅读56次。近年来&#xff0c;实体客服机器人开始出现在银行办公厅、电信商务厅等场合&#xff0c;形成了网络智能客服、电话智能客服、实体客服机器人综合智能客服系统&#xff0c;这初步形成了一种新的产业形式。https://blog.csdn…

Verilog刷题[hdlbits] :Always nolatches

题目&#xff1a;Always nolatches Suppose you’re building a circuit to process scancodes from a PS/2 keyboard for a game. Given the last two bytes of scancodes received, you need to indicate whether one of the arrow keys on the keyboard have been pressed.…

Matlab使用cftool进行曲线拟合

第一步&#xff0c;导入要拟合的输入和输出数据 导入excel时&#xff0c;如果作为列矢量导入&#xff0c;则会将excel的数据按列导入&#xff0c;并且&#xff0c;默认将第一行的变量名作为每一列的矢量名。 第二步&#xff0c;打开插件curve fitting 在应用程序里打开&#…

MathType公式编辑器7.4.4最新中文版下载

不得不承认MathType公式编辑器是一个强大的数学公式编辑器&#xff0c;专门为理科生准备&#xff0c;MathType数学公式编辑器用于编辑数学试卷、书籍、报刊、论文、幻灯演示等文档&#xff0c;能够帮助使用者快速的在各种文档中插入符号和公式&#xff0c;多复杂的公式都可轻松…

金融工作怎么做?低代码如何助力金融行业

10月30日至31日&#xff0c;中央金融工作会议在北京举行。金融是国民经济的“血脉”&#xff0c;是国家核心竞争力的重要组成部分。会议指出&#xff0c;党的十八大以来&#xff0c;在党中央集中统一领导下&#xff0c;金融系统有力支撑经济社会发展大局&#xff0c;坚决打好防…

小白高效自学-网络安全(黑客技术)

网络安全零基础入门学习路线&规划 初级 1、网络安全理论知识&#xff08;2天&#xff09; 了解行业相关背景&#xff0c;前景&#xff0c;确定发展方向。 学习网络安全相关法律法规。 网络安全运营的概念。 等保简介、等保规定、流程和规范。&#xff08;非常重要&#x…

MarkdownPad2, CSDN及有道云笔记对数学公式的支持

MarkdownPad2, CSDN及有道云笔记对数学公式的支持 MarkdownPad2的安装 下载并安装MrakdownPad2软件&#xff0c;下载地址安装awesomium_v1.6.6_sdk_win&#xff0c; 下载地址安装支持公式编辑的插件&#xff0c;注意&#xff0c;在MarkdownPad2的 Tools > Options > Ad…

Qt/C++开发经验小技巧286-290

国内站点&#xff1a;https://gitee.com/feiyangqingyun 国际站点&#xff1a;https://github.com/feiyangqingyun 很多时候项目越写越大&#xff0c;然后就可能遇到&#xff0c;明明之前很简单的一段代码&#xff0c;运行的好好的&#xff0c;就那么几行几十行&#xff0c;为何…

VxLAN 网络,看这一篇就够了!

你们好&#xff0c;我的网工朋友。 VLAN作为传统的网络隔离技术&#xff0c;是网工们工作中离不开的技术&#xff0c;这已经给你说过太多。 今天想跟你聊的是VXLAN。 一个字母的区别&#xff0c;你分得清VLAN和VXLAN吗&#xff0c;他们有啥区别&#xff1f;你知道VXLAN到底是…

Python Opencv实践 - 车牌定位(纯练手,存在失败场景,可以继续优化)

使用传统的计算机视觉方法定位图像中的车牌&#xff0c;参考了部分网上的文章&#xff0c;实际定位效果对于我目前使用的网上的图片来说还可以。实测发现对于车身本身是蓝色、或是车牌本身上方有明显边缘的情况这类图片定位效果较差。纯练手项目&#xff0c;仅供参考。代码中im…

gorm的自动化工具gen_已设置图床

gorm的自动化工具gen 官方 https://gorm.io/zh_CN/gen/假设数据库结构如 这里使用gen-tool 安装 go install gorm.io/gen/tools/gentoollatest用法 gentool -hUsage of gentool:-c string配置文件名、默认值 “”、命令行选项的优先级高于配置文件。 -db string指定Driver…

【机芯智能】智能公元(语音模块)

语音模块配置 进入语音模块智能公元官网&#xff0c;配置词条和识别后的串口输出指令. 记录下相关指令以及上图的识别词条&#xff0c;方便SDK烧写后的调试 SDK烧写 4. SDK 先和电脑调试助手配合&#xff0c;验证数据

Linux开发工具之自动化构建工具-make/Makefile

文章目录 1.make/Makefile的介绍2.简单编写及使用3.ACM时间4.extern的复习5.多文件的编译5.0复习翻译过程5.1多文件的构成5.2手动编译5.3利用Makefile 1.make/Makefile的介绍 make是一个命令 makefile是一个文件[makefile也对] 之前的学习都没有维护项目结构 当有多个.c文件 先…

Triples of Cows

题目传送门 引 模拟赛 T 4 T4 T4 , 变换挺妙的, 而且感觉转换后问题就迎刃而解了 解法 强行模拟拆点重连边显然不行,会让图的边数达到 n 2 n^2 n2 级别的 —————————————————————————————————————————————————— 考虑转…

μC/OS-II---内核:任务Task

目录 内核&#xff1a;多任务&#xff08;ucos_ii.h文件的函数&#xff09;Task创建Task创建&#xff08;扩展&#xff09;Task删除/请求删除Task改变Task优先级Task挂起和恢复Task信息获取Task调度器上锁和开锁 内核&#xff1a;多任务&#xff08;ucos_ii.h文件的函数&#x…

计算机底层的秘密 摘抄笔记

https://www.bookstack.cn/read/webxiaohua-gitbook/README.md 大部分是摘抄 机器指令需要加载到内存中执行&#xff0c;因此需要记录下内存的起始地址和长度&#xff1b;同时要找到函数的入口地址并写到PC寄存器中&#xff0c;想一想这是不是需要一个数据结构来记录下这些信…

springCloud和dubbo的区别

两者都是现在主流的微服务框架&#xff0c;但却存在不少差异&#xff1a; 初始定位不同&#xff1a;SpringCloud定位为微服务架构下的一站式解决方案&#xff1b;Dubbo 是 SOA 时代的产物&#xff0c;它的关注点主要在于服务的调用和治理生态环境不同&#xff1a;SpringCloud依…

Bean——IOC(Github上有代码)

源码 https://github.com/cmdch2017/Bean_IOC.git 获取Bean对象 BeanFactory Bean的作用域 第三方Bean需要用Bean注解 比如消息队列项目中&#xff0c;需要用到Json的消息转换器&#xff0c;这是第三方的Bean对象&#xff0c;所以不能用Component&#xff0c;而要用Bean …

C语言---插入排序、希尔排序、冒泡排序、选择排序、快速排序简单介绍

文章目录 插入排序希尔排序冒泡排序选择排序快速排序 本文主要介绍用C语言实现的一些排序方法&#xff0c;有插入排序、希尔排序、冒泡排序、选择排序和快速排序&#xff0c;文章中给出的例子都是按照升序排列的。 插入排序 若数组只有一个元素&#xff0c;自然不用排序&#…