当前位置: 首页 > article >正文

算法题(150):拼数

审题:
本题需要我们将数组中的数据经过排序,使得他们拼接后得到的数是所有拼接方案中最大的

思路:
方法一:排序贪心

贪心策略1:直接排序

如果我们直接按照数组数据的字典序进行排序,会导致部分情况出错

eg:s1 = 35 ,s2 = 357

如果按照字典序直接排,那么此时会拼接位25257,而实际上我们可以拼接出更大的数据35735,所以直接将数据的字典序进行比较是错误的

贪心策略2:规则排序

排序规则:我们可以按照拼接后的数据的字典序进行判断

eg:a,b分别为数组中的数据(以string形式存储)

a+b > b+a:说明a数据放在前面可以得到更大的数

a+b < b+a:说明b数据放在前面可以得到更大的数

判断解析:我们先用+进行字符串连接,然后根据字典序进行判断大小(其实就是整形数据的判断方法,都是从最高位开始判断大小)

补充:排序贪心的使用前提

最终结果要对所有元素进行排序,且交换相邻元素顺序的时候不会影响其他元素

解题:
 

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 30;
int n;
string a[N];
bool cmp(string& x, string& y)
{return x+y > y+x;
}
int main()
{cin >> n;for (int i = 0; i < n; i++){cin >> a[i];}sort(a, a + n, cmp);for (int i = 0; i < n; i++){cout << a[i];}return 0;
}

总体逻辑:

1.录入数据

2.按照规则进行排序

3.按照排好的顺序进行输出

其中cmp是一个仿函数,用于控制比较逻辑:
这里我们的比较逻辑是a+b > b+a就让a放前面,和前面分析的一样

P1012 [NOIP 1998 提高组] 拼数 - 洛谷

http://www.lryc.cn/news/2379772.html

相关文章:

  • Denoising Score Matching with Langevin Dynamics
  • Docker构建 Dify 应用定时任务助手
  • mongodb管理工具的使用
  • 第2篇 水滴穿透:IGBT模块的绝对防御体系
  • LVGL(lv_dropdown下拉列表控件)
  • 2.微服务-配置
  • python实现pdf转图片(针对每一页)
  • C语言练手磨时间
  • 数字图像处理——图像压缩
  • 验证器回调中value值没有数据
  • Python | 需求预测模型
  • 双指针算法:原理与应用详解
  • 打造灵感投掷器:我的「IdeaDice」开发记录
  • 2025ICPC邀请赛南昌游记
  • python重庆旅游系统-旅游攻略
  • MySQL企业版免费开启,强先体验
  • 从纸质契约到智能契约:AI如何改写信任规则与商业效率?​——从智能合约到监管科技,一场颠覆传统商业逻辑的技术革命
  • 常见的 HTTP 接口(请求方法)
  • iOS 抓包实战:从 Charles 到Sniffmaster 的日常工具对比与使用经验
  • Lodash isEqual 方法源码实现分析
  • Qt Widgets模块功能详细说明,基本控件:QCheckBox(三)
  • 第四天的尝试
  • 【git进阶】git rebase(变基)
  • WPS中代码段的识别方法及JS宏实现
  • 小米MUJIA智能音频眼镜来袭
  • 【神经网络与深度学习】GAN 生成对抗训练模型在实际训练中很容易判别器收敛,生成器发散
  • 基于SpringBoot的家政预约系统
  • [服务器备份教程] Rclone实战:自动备份数据到阿里云OSS/腾讯云COS等对象存储
  • 使用 Whisper 生成视频字幕:从提取音频到批量处理
  • Axure难点解决分享:垂直菜单展开与收回(4大核心问题与专家级解决方案)