第 25 场 蓝桥月赛

4.喜糖摆放【算法赛】 - 蓝桥云课

问题描述

在过年时,蓝桥村的孩子们充满活力,他们化身为捣蛋鬼,挨家挨户寻讨喜糖。他们一共收到了N颗糖,每颗糖的甜度各不相同,第i颗糖的甜度为Ai。

然而,如何分配这些喜糖却成了一个令人困扰的问题,因为糖的数量不能完全平均分给孩子们。

蓝桥村的村长察觉到了这个困难,于是说道:“我有一个问题,只要你们中有小朋友能解决,我就会提供足够的喜糖,使得你们可以均分。”

问题陈述如下:
每次可以选择将任意位置的糖果移到最后,求使得糖果按照升序排列所需的最小操作次数。

作为蓝桥村最聪明的孩子之一,你能否尝试解决这个问题呢?

输入格式

第一行输入一个整数N(2≤N≤10^5)表示糖果数量。

第二行输入N个整数A1, A2, …, AN(1≤Ai≤10^9)表示糖果的甜度,数据保证A1, A2, …, AN各不相同。

输出格式

输出一个整数表示答案。

样例输入

5
1 3 2 4 5

样例输出

3

思路:

这道题的原理基于数组排序和元素位置调整的概念。题目要求找出将一组无序的糖果甜度数组(a)通过最少次数的“将任意位置的糖果移到最后”的操作,使其变为升序排列。然而,直接模拟这种“移动到最后”的操作可能会很复杂,因为每次移动都会影响数组中后续元素的位置。

幸运的是,我们可以采用一个更简洁的思路来解决这个问题,而不需要显式地模拟每个移动操作。这个思路基于以下几个观察:

  1. 排序后的数组:首先,我们对原始数组的一个副本(数组b)进行排序,得到升序排列的数组。这个排序后的数组代表了目标状态。

  2. 元素匹配:然后,我们遍历原始数组(数组a),并使用一个指针(cur)在排序后的数组(数组b)中移动,以跟踪当前“应该”出现的元素。每当遇到一个不匹配的元素时,我们意味着原始数组中的该元素不在其排序后的正确位置上。

  3. 计数调整:对于每个不匹配的元素,我们可以认为需要进行一次“调整”来将其放到正确的位置上。这里的“调整”并不直接对应题目中的“将任意位置的糖果移到最后”的操作,而是指逻辑上将该元素(或其影响链中的某个元素)移动到排序后的正确位置上所需的操作。由于题目只关心操作次数,而不关心具体的操作过程,因此这种计数方法是有效的。

  4. 贪心策略:由于数组中的元素各不相同,我们可以直接通过值来匹配元素,而不是通过索引。这种方法实际上采用了一种贪心策略:每次遇到不匹配时,我们都增加操作次数,而不关心具体的移动路径。这种策略在这个问题中是有效的,因为我们只需要知道有多少元素不在它们排序后的位置上。

  5. 输出结果:最后,我们输出计数器的值,即需要的最小操作次数(在这个问题的上下文中,“操作”是指将元素逻辑上移动到其排序后的正确位置上所需的“调整”次数)。

需要注意的是,虽然这种方法没有直接模拟题目中描述的“将任意位置的糖果移到最后”的操作,但它正确地计算了为了达到排序状态所需的最少“调整”次数。这里的“调整”可以理解为逻辑上的移动操作,它反映了将原始数组变为排序数组所需的最小工作量。

因此,这道题的原理是利用排序和元素位置匹配的方法,通过计数不匹配元素对来间接计算达到排序状态所需的最少操作次数。

代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 1e5+10;
int a[N];
int b[N];
int main() 
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin >> n; for(int i = 1 ; i <= n ; i++){int x;cin >> x;a[i] = x;b[i] = x;}sort(b+1,b+1+n);int cur = 1,ans = 0;for(int i = 1 ; i <= n ; i++){if(a[i] != b[cur]){ans++;}else{cur++;}}cout << ans << '\n';return 0;
}

总之:以目标数组升序为准,如果当前数字位置不匹配目标位置,那么操作数就要+1,寻找到匹配数组,直到数组结尾。找到匹配数组,那么目标数组和当前数字数组都可以往下一位。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库笔记——版本号机制和CAS(Compare And Swap)

大家好&#xff0c;这里是Good Note&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;本文详细介绍乐观锁的两种实现方式&#xff1a;版本号机制和CAS&#xff08;Compare And Swap&#xff09;。 文章目录 MySQL 内置的并发控制机制MVCC&#xff08;多版本并发控制&am…

深度解析:基于Vue 3与Element Plus的学校管理系统技术实现

一、项目架构分析 1.1 技术栈全景 核心框架&#xff1a;Vue 3 TypeScript UI组件库&#xff1a;Element Plus&#xff08;含图标动态注册&#xff09; 状态管理&#xff1a;Pinia&#xff08;用户状态持久化&#xff09; 路由方案&#xff1a;Vue Router&#xff08;动态路…

想品客老师的第七天:闭包和作用域

闭包之前的内容写在这里 环境、作用域、回收 首先还是数据的回收问题&#xff0c;全局变量一般都是通过关闭页面回收的&#xff1b;而局部变量的值不用了&#xff0c;会被自动回收掉 像这种写在全局里的就不会被主动回收捏&#xff1a; let title 荷叶饭function fn() {ale…

写一个存储“网站”的网站前的分析

要创建一个能够存储自己网站内容的“网站”,通常意味着你希望有一个可以存储网站数据、文件、内容等信息的系统。为了实现这一目标,可以考虑构建一个内容管理系统(CMS),这个系统能够帮助你存储和管理网站上的内容。 图片仅供参考 以下是如何实现一个可以存储自己网站内容…

aws(学习笔记第二十六课) 使用AWS Elastic Beanstalk

aws(学习笔记第二十六课) 使用aws Elastic Beanstalk 学习内容&#xff1a; AWS Elastic Beanstalk整体架构AWS Elastic Beanstalk的hands onAWS Elastic Beanstalk部署node.js程序包练习使用AWS Elastic Beanstalk的ebcli 1. AWS Elastic Beanstalk整体架构 官方的guide AWS…

从0到1:C++ 开启游戏开发奇幻之旅(一)

目录 为什么选择 C 进行游戏开发 性能卓越 内存管理精细 跨平台兼容性强 搭建 C 游戏开发环境 集成开发环境&#xff08;IDE&#xff09; Visual Studio CLion 图形库 SDL&#xff08;Simple DirectMedia Layer&#xff09; SFML&#xff08;Simple and Fast Multim…

vim的多文件操作

[rootxxx ~]# vim aa.txt bb.txt cc.txt #多文件操作 next #下一个文件 prev #上一个文件 first #第一个文件 last #最后一个文件 快捷键: ctrlshift^ #当前和上个之间切换 说明&#xff1a;快捷键ctrlshift^&#xff0c…

安宝特方案 | AR在供应链管理中的应用:提升效率与透明度

随着全球化的不断深入和市场需求的快速变化&#xff0c;企业对供应链管理的要求也日益提高。如何在复杂的供应链环境中提升效率、降低成本&#xff0c;并确保信息的透明度&#xff0c;成为了各大行业亟待解决的问题。而增强现实&#xff08;AR&#xff09;技术&#xff0c;特别…

【ES实战】治理项之索引模板相关治理

索引模板治理 文章目录 索引模板治理问题现象分析思路操作步骤问题程序化方案索引与索引模板增加分片数校验管理 彩蛋如何查询Flink on Yarn 模式下的Task Manager日志相关配置查询已停止的Flink任务查询未停止的Flink任务 问题现象 在集群索引新建时&#xff0c;索引的分片比…

winfrom项目,引用EPPlus.dll实现将DataTable 中的数据保存到Excel文件

最近研究不安装office也可以保存Excel文件&#xff0c;在网上查询资料找到这个方法。 第一步&#xff1a;下载EPPlus.dll文件&#xff08;自行去网上搜索下载&#xff09; 第二步&#xff1a;引用到需要用的项目中&#xff0c;如图所示&#xff1a; 第三步&#xff1a;写代码…

Unity git版本管理

创建仓库的时候添加了Unity的.gitignore模版&#xff0c;在这个时候就能自动过滤不需要的文件 打开git bash之后&#xff0c;步骤git版本管理-CSDN博客 如果报错&#xff0c;尝试重新进git 第一次传会耗时较长&#xff0c;之后的更新就很快了

分布式微服务系统简述

distributed microservice 分布式与微服务的定义及关系&#xff1b;分布式微服务架构里的各组件&#xff0c;如&#xff1a;配置中心、服务注册/发现、服务网关、负载均衡器、限流降级、断路器、服务调用、分布式事务等&#xff1b;spring cloud 介绍及实现案例&#xff0c;如…

npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported

vue 启动项目时&#xff0c;npm run serve 报下面的错&#xff1a; error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:133:10) at FSReqCallback.readFileAfterClose [as on…

国产编辑器EverEdit - 大纲视图

1 大纲视图 1.1 应用场景 在编辑较长代码文件时&#xff0c;使用大纲视图可以方便的检视当前文件的变量、函数等信息&#xff0c;方便在不同函数间跳转&#xff0c;对整个文档的全貌了然于胸。   在编辑XML文档时&#xff0c;通过展示XML文件的层次结构、节点布局&#xff0…

FastExcel的使用

前言 FastExcel 是一款基于 Java 的开源库&#xff0c;旨在提供快速、简洁且能解决大文件内存溢出问题的 Excel 处理工具。它兼容 EasyExcel&#xff0c;提供性能优化、bug 修复&#xff0c;并新增了如读取指定行数和将 Excel 转换为 PDF 的功能。 FastExcel 的主要功能 高性…

GESP2024年3月认证C++六级( 第三部分编程题(1)游戏)

参考程序&#xff1a; #include <cstdio> using namespace std; const int N 2e5 5; const int mod 1e9 7; int n, a, b, c; int f[N << 1]; int ans; int main() {scanf("%d%d%d%d", &n, &a, &b, &c);f[N n] 1;for (int i n; i…

JVM深入学习(一)

目录 一.JVM概述 1.1 为什么要学jvm&#xff1f; 1.2 jvm的作用 1.3 jvm内部构造 二.JVM类加载 2.1类加载过程 2.2类加载器 2.3类加载器的分类 2.4双亲委派机制 三.运行时数据区 堆空间区域划分&#xff08;堆&#xff09; 为什么分区(代)&#xff1f;&#xff08…

java后端之事务管理

Transactional注解&#xff1a;作用于业务层的方法、类、接口上&#xff0c;将当前方法交给spring进行事务管理&#xff0c;执行前开启事务&#xff0c;成功执行则提交事务&#xff0c;执行异常回滚事务 spring事务管理日志&#xff1a; 默认情况下&#xff0c;只有出现Runti…

hadoop==docker desktop搭建hadoop

hdfs map readuce yarn https://medium.com/guillermovc/setting-up-hadoop-with-docker-and-using-mapreduce-framework-c1cd125d4f7b 清理资源 docker-compose down docker system prune -f

类和对象(4)——多态:方法重写与动态绑定、向上转型和向下转型、多态的实现条件

目录 1. 向上转型和向下转型 1.1 向上转型 1.2 向下转型 1.3 instanceof关键字 2. 重写&#xff08;overidde&#xff09; 2.1 方法重写的规则 2.1.1 基础规则 2.1.2 深层规则 2.2 三种不能重写的方法 final修饰 private修饰 static修饰 3. 动态绑定 3.1 动态绑…