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

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.jsqmd.com/news/241311/

相关文章:

  • 实验一 Python开发环境语法基础
  • 避坑指南:LuatOS-Air脚本移植至LuatOS常见问题!
  • eide环境下GD32固件下载失败问题全面讲解
  • 实验二 Python 控制结构与文件操作
  • 核心要点:避免USB Serial驱动下载后被系统禁用
  • Opensearch数据迁移:CCR功能数据迁移完整操作指南(上)
  • 计算机毕业设计-课程设计-校园失物招领系统设计与实现-程序-文档-全套资料
  • Modbus RTU数据读取异常?ModbusPoll下载抓包辅助诊断
  • SpringBoot+Vue 论坛网站平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 基于STM32的QSPI通信实战案例详解
  • Keil项目迁移时中文注释乱码的预防与处理策略
  • 深入 Yak 语言高级编程:异步并发与延迟执行实践
  • 论坛网站信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 钥匙和房间
  • 大模型推理过程内存占用(动态)
  • IAR使用教程:优化嵌入式C代码的操作指南
  • u8g2字体编码与字符映射关系通俗解释
  • AD23新增元件库资源盘点:与AD20的生态扩展对比
  • 单词接龙问题
  • 信息化在线教学平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • STM32最小系统板Keil5下载实操从零实现
  • 冗余连接问题
  • SpringBoot+Vue 在线宠物用品交易网站平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • MOSFET驱动电路设计从零实现:基于IR2110
  • Cortex-M ISR响应延迟优化完整示例
  • AI SaaS产品的数据管道架构:实时处理方案
  • LVGL移植入门:在STM32上运行GUI的实战案例
  • 冗余连接II
  • 【毕业设计】SpringBoot+Vue+MySQL 游戏销售平台平台源码+数据库+论文+部署文档
  • SpringBoot+Vue 汽车票网上预订系统管理平台源码【适合毕设/课设/学习】Java+MySQL