news 2026/10/16 6:57:08

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 3:53:45

高速时钟稳定性设计:STM32CubeMX核心要点

高速时钟稳定性设计&#xff1a;STM32CubeMX实战精要你有没有遇到过这样的问题&#xff1f;系统冷启动偶尔“卡死”&#xff0c;ADC采样值莫名漂移&#xff0c;USB通信频繁断开……排查半天软硬件&#xff0c;最后发现——根源竟是时钟配置不当。在嵌入式开发中&#xff0c;CPU…

作者头像 李华
网站建设 2026/10/14 23:45:56

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

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

作者头像 李华
网站建设 2026/10/9 19:13:55

AI SaaS产品的数据管道架构:实时处理方案

AI SaaS产品的数据管道架构&#xff1a;实时处理方案关键词&#xff1a;AI SaaS产品、数据管道架构、实时处理、数据流动、架构设计摘要&#xff1a;本文聚焦于AI SaaS产品的数据管道架构实时处理方案。首先介绍了相关背景知识&#xff0c;让大家明白为什么要关注实时处理以及预…

作者头像 李华
网站建设 2026/10/8 21:59:02

FileMasterPro v1.2.5:全能多功能文件管理工具

FileMasterPro v1.2.5 是专为 Windows 系统打造的专业文件管理工具&#xff0c;集成极速搜索、加密保险箱、智能整理、批量重命名及重复文件查重等核心功能&#xff0c;兼顾安全性与便捷性&#xff0c;轻松解决个人及办公场景中的海量文件管理难题。快速搜索与结果筛选作为高效…

作者头像 李华