hh的蓝桥杯每日一题(交换瓶子)

15.交换瓶子 - 蓝桥云课

方法一:贪心做法

  • 对于位置 i,如果 a[i] ≠ i

  • 就把 a[i] 和 a[a[i]] 交换(把当前数字放到它应该去的位置)

  • 这样每次交换都能让至少一个数字归位

  • 重复直到 a[i] = i

#include<iostream> using namespace std; const int N = 10010; int n; int a[N]; int main() { cin >> n; for(int i = 1; i <= n; i++) { cin >> a[i]; } int ans = 0; // 贪心:直接把每个数放到正确位置 for(int i = 1; i <= n; i++) { while(a[i] != i) { // 如果当前位置的数不对 swap(a[i], a[a[i]]); // 把它和它应该在的位置交换 ans++; } } cout << ans << endl; return 0; }

方法二:利用环的性质(交换排序最小交换问题)

这个问题实际上可以转化为图论中的环分解问题

  • 把排列看作一个置换(permutation)

  • 每个元素应该回到它的正确位置(值 i 应该在位置 i)

  • 通过交换操作,我们可以将排列分解为若干个环

  • 最小交换次数 = 所有环的大小之和 - 环的个数

#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N = 10010; // 题目说 N<10000,所以开大一点 int n; int a[N]; bool st[N]; // 标记数组,记录位置是否访问过 int main() { cin >> n; for(int i = 1; i <= n; i++) // 注意:题目瓶子编号从1开始 { cin >> a[i]; } int ans = 0; // 遍历所有位置 for(int i = 1; i <= n; i++) { // 如果当前位置的值不是 i,且没有被访问过 if(a[i] != i && !st[i]) { // 找到当前元素所在的环 int j = i; int cnt = 0; // 环的大小 while(!st[j]) { st[j] = true; // 标记已访问 j = a[j]; // 跳到这个位置应该放的元素的位置 cnt++; } // 环的大小为 cnt,需要 cnt-1 次交换 ans += (cnt - 1); } } cout << ans << endl; return 0; }

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

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

相关文章

实验一 Python开发环境语法基础

实验一 Python开发环境&语法基础一、实验基本原理运用Anaconda搭建的Jupyter notebook平台编写实例Python程序。二、实验目的1、熟悉Python集成开发系统背景。2、熟悉Jupyter Notebook开发环境。3、熟悉编写程序的基本过程。三、具体要求1、熟悉Python的基本语法&#xff0…

LuatOS系统消息处理机制深度解析!

在LuatOS嵌入式运行环境中&#xff0c;系统消息是实现模块间通信与事件响应的核心机制。其消息处理机制采用轻量级事件驱动模型&#xff0c;有效降低CPU占用并提升系统实时性。此处列举了LuatOS框架中自带的系统消息列表。一、sys文档链接&#xff1a;https://docs.openluat.co…

避坑指南:LuatOS-Air脚本移植至LuatOS常见问题!

在实际开发中&#xff0c;许多开发者在尝试将LuatOS-Air脚本运行于标准LuatOS环境时遭遇报错或功能异常。这些问题多源于对底层驱动抽象层理解不足以及对系统任务模型的误用。本文将梳理典型错误场景&#xff0c;并提供可落地的修复方案&#xff0c;助力实现平滑迁移。 一、lua…

eide环境下GD32固件下载失败问题全面讲解

eIDE烧录GD32失败&#xff1f;从底层机制到实战排错的全链路技术拆解你有没有遇到过这样的场景&#xff1a;代码编译通过&#xff0c;接线看似没问题&#xff0c;点击“Download”按钮后却弹出一串红字——“Target Not Responding”、“Connection Failed”或干脆卡在“Connec…

实验二 Python 控制结构与文件操作

实验二 Python 控制结构与文件操作一、实验基本原理运用 Anaconda 搭建的 Jupyter notebook 平台编写 Python 实例程序。二、实验目的1、理解 Python 的流程控制、文件操作的基本原理。2、通过实际案例编程&#xff0c;掌握 Python 的流程控制、文件的基本操作。三、具体要求1、…

核心要点:避免USB Serial驱动下载后被系统禁用

一次连接&#xff0c;永久可用&#xff1a;破解USB Serial驱动被系统禁用的底层真相 你有没有遇到过这样的场景&#xff1f; 刚插上开发板&#xff0c;驱动安装成功&#xff0c;PuTTY连上了&#xff0c;日志哗哗地刷出来——一切看起来都那么完美。可第二天重启电脑&#xff…

Opensearch数据迁移:CCR功能数据迁移完整操作指南(上)

#作者&#xff1a;stackofumbrella 文章目录使用CCR功能迁移数据功能概述约束限制在主集群中创建索引从集群中执行启用CCR复制功能在主集群中写入测试数据在从集群中查看同步状态查看从集群中的同步数据关闭CCR功能查看远程集群信息删除远程集群配置信息使用CCR功能迁移数据 功…

计算机毕业设计-课程设计-校园失物招领系统设计与实现-程序-文档-全套资料

摘要学校作为一个人流量非常大的场所&#xff0c;当我们的物品不小心遗失后&#xff0c;之后的找寻过程一定是非常困难的。而为了可以解决这中问题&#xff0c;就出现了校园失物招领网站&#xff0c;通过校园失物招领网站&#xff0c;可以减少我们因为失物而带来的不便和困扰。…

Modbus RTU数据读取异常?ModbusPoll下载抓包辅助诊断

Modbus RTU通信总出问题&#xff1f;别急&#xff0c;用ModbusPoll抓包一招定位你有没有遇到过这样的场景&#xff1a;某台电表明明通着电、接线也没松动&#xff0c;但PLC就是读不到数据&#xff1b;或者HMI上某个温度值频繁跳变、甚至直接报超时&#xff1f;如果这个系统走的…

基于STM32的QSPI通信实战案例详解

STM32上的QSPI实战&#xff1a;从零搭建高速外部存储系统你有没有遇到过这样的困境&#xff1f;项目做到一半&#xff0c;内部Flash快爆了&#xff0c;GUI资源、音频文件、新功能代码全挤在一起&#xff0c;改一行代码都得精打细算&#xff1b;OTA升级时看着进度条一动不动&…

Keil项目迁移时中文注释乱码的预防与处理策略

如何彻底解决 Keil 中文注释乱码问题&#xff1f;一个嵌入式老手的实战经验最近接手了一个遗留项目&#xff0c;从同事手里接过压缩包解压后打开 Keil 工程&#xff0c;第一眼就傻了——满屏“ž„‹Œ–£”、“???”……原本清晰的中文注释全变成了天书。这哪是代码…

深入 Yak 语言高级编程:异步并发与延迟执行实践

深入Yak语言高级编程&#xff1a;异步并发与延迟执行实践 前言 Yak语言作为一款面向网络安全领域的动态编程语言&#xff0c;凭借其轻量、高效的特性&#xff0c;在渗透测试、漏洞挖掘等场景中得到了广泛应用。对于安全从业者而言&#xff0c;编写高性能的自动化脚本往往需要依…

论坛网站信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

&#x1f4a1;实话实说&#xff1a;有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着互联网技术的快速发展&#xff0c;论坛网站作为信息交流的重要平台&#xff0c;逐渐成为用户分享观点、获取知识的主要渠道。传统论坛系统在功…

钥匙和房间

本文参考代码随想录 有 N 个房间&#xff0c;开始时你位于 0 号房间。每个房间有不同的号码&#xff1a;0&#xff0c;1&#xff0c;2&#xff0c;…&#xff0c;N-1&#xff0c;并且房间里可能有一些钥匙能使你进入下一个房间。 在形式上&#xff0c;对于每个房间 i 都有一个…

IAR使用教程:优化嵌入式C代码的操作指南

如何用IAR榨干MCU性能&#xff1f;一位嵌入式老手的实战优化笔记最近在调试一个低功耗传感器项目时&#xff0c;客户突然提出“电池寿命必须延长30%”。我看了看当前固件&#xff1a;Flash用了快300KB&#xff0c;SRAM占用接近80%&#xff0c;主循环执行时间也偏长。硬件已经定…

大模型推理过程内存占用(动态)

阿里社区博客(重点在transformer的激活值参数量估计)&#xff1a;https://developer.aliyun.com/article/1496103 推理时显存占用&#xff08;GitHub&#xff09;&#xff1a; https://github.com/Hoper-J/I-Guide-and-Demos-zh_CN/blob/master/Guide/07.%20%E6%8E%A2%E7%A9%…

u8g2字体编码与字符映射关系通俗解释

u8g2字体编码与字符映射&#xff1a;从“乱码”到清晰显示的底层逻辑 你有没有遇到过这样的场景&#xff1f;在STM32或ESP32上驱动一块OLED屏&#xff0c;信心满满地调用 u8g2_DrawStr() 打印一句中文“温度25C”&#xff0c;结果屏幕上却只出现几个方框、问号&#xff0c;甚…

AD23新增元件库资源盘点:与AD20的生态扩展对比

AD23元件库生态跃迁&#xff1a;从“建库”到“治库”的工程革命你有没有经历过这样的场景&#xff1f;深夜赶板&#xff0c;原理图画到一半&#xff0c;发现缺一个关键电源芯片的封装——查遍本地库、论坛、第三方网站&#xff0c;最终找到一个名字像模像样但引脚顺序反了的Pc…

单词接龙问题

本文参考代码随想录 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列&#xff1a; 序列中第一个单词是 beginWord 。 序列中最后一个单词是 endWord 。 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典 wordList 中的单词。…

STM32最小系统板Keil5下载实操从零实现

从零搭建STM32最小系统板&#xff1a;Keil5下载实战全解析 你是否也经历过这样的时刻——电路焊好了&#xff0c;代码写完了&#xff0c;满怀期待地点击“Download”&#xff0c;结果 Keil 弹出一串红字&#xff1a;“No target connected”&#xff1f; 别急&#xff0c;这几…