PTA最少交換次數

最少交換次數

分數 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就像全自動…