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

每日一题之喜糖摆放

问题描述

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

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

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

问题陈述如下:

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

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

输入格式

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

第二行输入 NN 个整数 A1,A2,⋯,AN(1≤Ai≤109)A1​,A2​,⋯,AN​(1≤Ai​≤109) 表示糖果的甜度,数据保证 A1,A2,⋯,ANA1​,A2​,⋯,AN​ 各不相同。

输出格式

输出一个整数表示答案。

这道题的意思是将给出的一组数字按升序排序,每次操作只可以将一位数字移动到最后,求最小操作数。

我们先考虑如何移动是最小的操作次数,我们只需要将需要移动的数按升序顺序移动的操作数就是最小操作数,例如 1 3 2 4 5,那么1 3 2,我们先需要移动3,移动3之后序列变成1 2 4 5 3,那么需要移动的就是4 5,。总结一下,1 2是按照升序序列,所以3需要移动,那么比3大的数都需要移动。那么我们就需要找到最长的升序序列,可以通过和排序后的序列进行比较来找,对比一下,就能找到最小的不需要移动的数字,也就是已经按照升序序列排序的数字,然后用N-不需要移动就是需要移动的次数。

#include <bits/stdc++.h>  
using namespace std;      

int main() {
  // 优化输入输出,关闭同步流,加快 cin 和 cout 的速度
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

  int N;                  // 定义变量 N,表示数组的大小
  cin >> N;               // 输入数组的大小 N

  vector<int> a(N);       // 定义大小为 N 的数组 a,用于存储输入的元素
  for (auto &x : a)       // 遍历数组 a,输入每个元素
    cin >> x;

  vector<int> sa = a;     // 定义数组 sa,并将其初始化为 a 的副本
  sort(sa.begin(), sa.end()); // 对 sa 进行排序,sa 现在是 a 的有序版本

  int k = 0;              // 定义变量 k,用于跟踪 sa 中已匹配的元素个数
  for (int i = 0; i < N && k < N; i++) { // 遍历数组 a
    if (a[i] == sa[k])    // 如果当前元素 a[i] 等于 sa 中的第 k 个元素
      k++;                // 匹配成功,k 自增
  }

  cout << N - k;          // 输出结果:未匹配的元素个数,即 N - k
  return 0;               
}


http://www.kler.cn/a/552987.html

相关文章:

  • 图片粘贴上传实现
  • 深入探讨优先队列:原理、实现与应用
  • 4.6 模型训练基类Trainer:Hugging Face工业级训练引擎深度剖析
  • 【0407】Postgres内核 Condition variables (ConditionVariable)设计机制 ①
  • Linux基础25-C语言之分支结构Ⅱ【入门级】
  • matplotlib 如何是的横坐标纵向显示
  • 实战开发coze应用-姓氏头像生成器(下)
  • 【开源免费】基于SpringBoot+Vue.JS医疗挂号管理系统(JAVA毕业设计)
  • python绘图之箱型图
  • 如何通过Bigemap Pro实现面合并和相交
  • 【大模型】DeepSeek 的人工智能发展之路
  • 前端对话框项目 react如何实时接收,Node.js 服务端转发Coze API响应结果详解
  • AOSP Android14 部分页面使用触摸会崩溃
  • 【数据结构-并查集】力扣1202. 交换字符串中的元素
  • 【复现DeepSeek-R1之Open R1实战】系列7:GRPO原理介绍、训练流程和源码深度解析
  • 从中心化到点对点:视频通话SDK组件EasyRTC如何通过WebP2P技术实现低延迟通信
  • 双脑微状态:一种量化任务驱动的脑间非对称性的超扫描EEG新方法
  • DeepSeek模型快速部署教程-搭建自己的DeepSeek
  • UE_C++ —— Container TMap
  • Spark 和 Hive 的关系与区别