最少交换次数

分数 15

作者 計科G隊長

单位 重庆大学

长度为N的数组中只有1,2,3三种值,要按升序排序,并且只能通过数值间的两两交换实现不能移位。比如某项竞赛的优胜者按金银铜牌排序,或者荷兰国旗问题都是该问题的实例。给定的一个 1,2,3 组成的数字序列,求排成升序所需的最少交换次数。

输入格式:

Line 1: N (1≤N≤1000)
Lines 2--(N+1): 每行一个数字1,2或3,共 N 行。

输出格式:

共一行,一个数字,表示排成升序所需的最少交换次数。

输入样例:

在这里给出一组输入。例如:

9
2
2
1
3
3
3
2
3
1 

输出样例:

共一行,一个数字.表示排成升序所需的最少交换次数.

4
#include <bits/stdc++.h>
using namespace std;signed main() {int N;cin >> N;vector<int> arr(N);int c1 = 0, c2 = 0, c3 = 0;for (int i = 0; i < N; ++i) {cin >> arr[i];if (arr[i] == 1) c1++;else if (arr[i] == 2) c2++;else c3++;}int e12 = 0, e13 = 0, e21 = 0, e23 = 0, e31 = 0, e32 = 0;// 1区: 0 to c1-1for (int i = 0; i < c1; ++i) {if (arr[i] == 2) e12++;else if (arr[i] == 3) e13++;}// 2区: c1 to c1 + c2 -1for (int i = c1; i < c1 + c2; ++i) {if (arr[i] == 1) e21++;else if (arr[i] == 3) e23++;}// 3区: c1 + c2 to N-1for (int i = c1 + c2; i < N; ++i) {if (arr[i] == 1) e31++;else if (arr[i] == 2) e32++;}int s1 = min(e12, e21);int s2 = min(e13, e31);int s3 = min(e23, e32);int total_errors = e12 + e13 + e21 + e23 + e31 + e32;int remaining = total_errors - 2 * (s1 + s2 + s3);int swaps = s1 + s2 + s3 + remaining / 3 * 2;cout << swaps << endl;return 0;
}

为了计算最少交换次数,我们可以考虑以下几点:

  1. 分区统计:首先,统计数组中1、2、3的个数。假设有c1个1,c2个2,c3个3。那么排序后的数组应该是前c1个是1,接着c2个是2,最后c3个是3。

  2. 错误放置的元素:在排序后的数组中,每个分区(1区、2区、3区)中不应该有其他分区的元素。例如,1区中不应该有2或3,2区中不应该有1或3,3区中不应该有1或2。

  3. 交换策略

    • 1区中的非1元素:1区中的2或3需要被交换出去。理想情况下,我们可以将1区中的2与2区中的1交换,或者1区中的3与3区中的1交换。这样可以一次交换纠正两个错误。

    • 2区中的非2元素:类似地,2区中的1可以与1区中的2交换,2区中的3可以与3区中的2交换。

    • 3区中的非3元素:同样处理。

  4. 计算最少交换次数

最少交换次数 = (可以直接交换的对数) + 2 * (剩下的无法直接交换的错误数)/ 3

  1. 首先,计算每个分区中错误放置的元素数量。

  2. 对于可以互相交换的错误(如1区中的2和2区中的1),每次交换可以纠正两个错误,因此这样的交换次数是min(1区中的2, 2区中的1)

  3. 剩下的错误需要通过每是那个需要通过两次交换来纠正一个错误(例如,1区中的2、2区中的3、3区中的1)。

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

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

相关文章

LiteHub中间件之跨域访问CORS

跨域访问CORS 原理基本概念简单请求非简单请求&#xff08;预检请求&#xff09; 代码实现服务器端Cors的关键配置服务端解析预检请求服务端填充响应 抓包分析 原理 基本概念 在浏览器安全模型中&#xff0c;同源策略是最重要的安全基石。 一个“域”是由3个要素组成的&#…

FastAPI开发教程

FastAPI 是一个现代、高性能的 Python Web 框架&#xff0c;专为构建 APIs 设计。它基于 Python 类型提示&#xff0c;支持异步编程&#xff0c;并提供自动生成的交互式文档&#xff08;Swagger UI 和 ReDoc&#xff09;。以下是 FastAPI 开发的核心指南&#xff1a; 1. 安装 …

基于Spring Boot + MyBatis-Plus + Thymeleaf的评论管理系统深度解析

你好呀&#xff0c;我是小邹。 个人博客系统日渐完善&#xff0c;现在的文章评论以及留言数量逐渐增多&#xff0c;所以今天重构了管理后台的评论列表&#xff08;全量查询 -> 分页条件搜索&#xff09;。 示例图 网页端手机端一、系统架构设计与技术选型 系统采用前后端分离…

sqlmap学习笔记ing(1.Easy_SQLi(时间,表单注入))

题解 根据题目提示&#xff0c;应为SQL注入&#xff0c;题目页面只有一个表单&#xff0c;用sqlmap进行表单注入。 使用--forms参数进行自动化表单注入&#xff0c;逐步得到flag。 ### 总结参数作用&#xff1a; -u 指定目标URL。 -C 指定列名&#xff08;多个…

SciPy 安装使用教程

一、SciPy 简介 SciPy&#xff08;Scientific Python&#xff09;是基于 NumPy 的开源科学计算库&#xff0c;提供了数值积分、优化、信号处理、线性代数、统计分析等高级科学计算功能。它是构建 Python 科学计算生态系统的核心组件之一&#xff0c;常用于科研、工程、数据分析…

【AI大模型】通义大模型与现有企业系统集成实战《CRM案例分析与安全最佳实践》

简介&#xff1a; 本文档详细介绍了基于通义大模型的CRM系统集成架构设计与优化实践。涵盖混合部署架构演进&#xff08;新增向量缓存、双通道同步&#xff09;、性能基准测试对比、客户意图分析模块、商机预测系统等核心功能实现。同时&#xff0c;深入探讨了安全防护体系、三…

如何进行需求全周期管理

实现高效的需求全周期管理&#xff0c;应从以下五个方面入手&#xff1a;1、建立系统化需求来源渠道、2、设置清晰的评审与优先级策略、3、加强执行过程的协同与跟踪、4、闭环需求验收与上线反馈、5、构建长期的需求知识沉淀机制。 其中&#xff0c;“加强执行过程的协同与跟踪…

热传导方程能量分析与边界条件研究

题目 问题 10. (a) 考虑热传导方程在 J = ( − ∞ , ∞ ) J = (-\infty, \infty) J=(−∞,∞) 上,证明“能量” E ( t ) = ∫ J u 2 ( x , t ) d x E(t) = \int_{J} u^{2}(x,t) dx E(t)=∫J​u2(x,t)dx (8) 不增加;进一步证明,除非 u ( x , t ) = 常数 u(x,t) = \text{常…

【AI News | 20250702】每日AI进展

AI Repos 1、LLM-RL-Visualized 提供100余张原创架构图&#xff0c;全面涵盖了 LLM (大语言模型)、VLM (视觉语言模型) 等大模型技术。内容深度解析了训练算法&#xff08;如 RL、RLHF、GRPO、DPO、SFT、CoT 蒸馏等&#xff09;、效果优化策略&#xff08;如 RAG、CoT&#xf…

安徽省企业如何做信创产品认证?信创认证流程与费用详解

安徽省作为长三角一体化发展的重要成员&#xff0c;正大力推进信息技术应用创新&#xff08;信创&#xff09;产业发展。依托合肥“中国声谷”、芜湖机器人及智能装备基地等产业集群&#xff0c;以及省内对信创产业的政策扶持&#xff0c;企业通过信创认证后&#xff0c;能更好…

百度文心 ERNIE 4.5 开源:开启中国多模态大模型开源新时代

百度文心 ERNIE 4.5 开源&#xff1a;开启中国多模态大模型开源新时代 随着DeepSeek-R1的横空出示&#xff0c;越来越多大公司开始开源模型&#xff0c;像DeepSeek R1发布的时候Kimi同步开源了技术文档&#xff0c;随着R1推动着思维链推理技术的发展&#xff0c;开源社区也出现…

22、企业项目管理(Project)全体系构建:从基础框架到智能防呆的完整解决方案

项目管理能力——企业VUCA战略落地的核心枢纽 在VUCA&#xff08;乌卡时代&#xff0c;即VUCA时代&#xff0c;是指人们生活在一个不稳定性、不确定性、复杂性、模糊性的时代、境况或者世界中。vuca是volatility&#xff08;易变性VUCA&#xff09;&#xff0c;uncertainty&am…

分布式定时任务:Elastic-Job-Lite

Elastic-Job-Lite 是一款由 Apache 开源的轻量级分布式任务调度框架&#xff0c;属于 ShardingSphere 生态体系的一部分。它专注于分布式任务调度&#xff0c;支持弹性伸缩、分片处理、高可用等特性&#xff0c;且不依赖中心化架构。 一、基础 &#xff08;一&#xff09;核心特…

记录一次生产环境ActiveMQ无法启动的问题

这次遇到一个问题&#xff0c;是ActiveMQ无法启动的&#xff0c;跟以往的现象不一样。这次是在服务器重启后出异常。 1、启动ActiveMQ时提示&#xff1a;activemq/data/kahadb/db.data&#xff08;输入输出错误&#xff09;&#xff0c;NotFoundFileException异常 2、想着不应该…

大型语言模型幻觉检测相关综述

背景 1.1 幻觉检测的定义与范围 大型语言模型&#xff08;LLMs&#xff09;中的幻觉检测 是指系统性地识别由LLMs生成的事实错误或无意义输出的任务&#xff0c;而无需依赖外部证据 [Li et al., 2024; Zhang et al., 2024]。这项任务对于确保LLM生成内容的可靠性和可信度至关…

Python爬虫与数据可视化教程

对于经常写爬虫的技术来说了&#xff0c;可视化大大的提高工作效率&#xff0c;可以让获取的数据更直观的展示在面前&#xff0c;下面我将通过具体实操给大家展示下多种可视化具体教程&#xff0c;希望能都帮助大家。 下面是一个完整的Python爬虫和数据可视化解决方案&#xff…

【GHS】Green Hills软件MULTI-IDE的安装教程

前言&#xff1a;MULTI-IDE作为一款Green Hills开发的支持C/C、Ada等语言的嵌入式开发环境&#xff0c;由于其优异的性能&#xff0c;所以在汽车电子软件的开发中占有重要地位。但是这款IDE需要付费使用&#xff0c;对于个人学习而言不太友好&#xff0c;所以这里介绍一款PJ版本…

Web攻防-文件上传黑白名单MIMEJS前端执行权限编码解析OSS存储分域名应用场景

知识点&#xff1a; 1、WEB攻防-文件上传-前端&黑白名单&MIME&文件头等 2、WEB攻防-文件上传-执行权限&解码还原&云存储&分站等 3、WEB攻防-文件上传-JS提取&特定漏洞&第三方编辑器 4、WEB攻防-文件上传-思维导图形成 常规文件上传&#xff1a…

Odoo系统大型业务优化实战

目录 背景说明ORM与模型优化数据量处理策略接口与报表优化系统架构优化监控与诊断工具项目实战总结&#xff08;案例&#xff09;后续优化建议性能优化检查清单总结 一、背景说明 在 Odoo 项目中&#xff0c;随着业务不断扩展&#xff0c;系统常常面临如下挑战&#xff1a; …

【2.4 漫画SpringBoot实战】

🚀 漫画SpringBoot实战 🎯 学习目标:掌握SpringBoot企业级开发,从零到一构建现代化Java应用 📋 目录 SpringBoot核心特性自动配置原理Web开发实战数据访问与事务监控与部署🎭 漫画引言 小明: “为什么SpringBoot这么受欢迎?” 架构师老王: “SpringBoot就像全自动…