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

ACM中的M题【牛客tracker 每日一题】

ACM中的M题

时间限制:1秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

此题为B BB题的困难版本,与B BB题有是否排序、交换元素限制以及数据范围的不同

有一个长度为n nn的数组{ a i } \{a_i\}{ai},每个{ a i } \{a_i\}{ai}属于且仅属于一个类别{ b i } \{b_i\}{bi}

已知{ a i } \{a_i\}{ai}无相同元素

你可以多次交换同一个类别下任意2 22个元素
直到每个位置的元素和原来都不相同
若有解请输出最小交换次数,反之无解输出− 1 -11

输入描述:

第一行输入一个正整数n nn

第二行输入n nn个非负整数{ a i } \{a_i\}{ai}

第三行输入n nn个非负整数{ b i } \{b_i\}{bi},表示{ a i } \{a_i\}{ai}类别

1 ≤ n ≤ 2 × 10 5 ; 0 ≤ a i ≤ 2 × 10 9 ; 0 ≤ b i ≤ 2 × 10 9 1≤n≤2×10^5; 0≤a_i≤2×10^9; 0≤b_i≤2×10^91n2×105;0ai2×109;0bi2×109
数据保证无相同a i a_iai

输出描述:

一个整数表示结果
若有解,输出最小交换次数
反之,输出− 1 -11

示例1

输入:

3 1 2 3 1 1 1

输出:

2

说明:

显然3 33个元素属于统一类别
第一次交换第一第二位置变为[ 2 , 1 , 3 ] [2,1,3][2,1,3]
第二次交换第一第三位置变为[ 3 , 1 , 2 ] [3,1,2][3,1,2]
显然无更少的交换次数能满足条件

示例2

输入:

3 0 1 2 0 1 2

输出:

-1

复制

显然3 33个数类别均不相同不可交换

示例3

输入:

4 0 1 2 3 0 2 2 0

输出:

2

示例4

输入:

2 1 2 0 0

输出:

1

解题思路

本题核心是分类别独立构造错排,结合置换环性质求解最小交换次数。由于仅同类别元素可任意交换,不同类别之间互不影响,因此按类别拆分问题独立求解。
首先做合法性判断:若存在大小为1的类别,该元素无法移动,必然留在原位,直接判定无解输出-1
对于大小为c cc的类别,要让所有元素错位,最少交换次数为⌈ c / 2 ⌉ \lceil c/2 \rceilc/2(即(c+1)//2):优先用两两交换(2元置换环)最大化环数,奇数个元素时搭配一个3元环补足,此时交换次数最少。
最后累加所有类别的交换次数即为答案。算法时间复杂度O ( n ) O(n)O(n),完美适配n ≤ 2 × 10 5 n \le 2\times10^5n2×105的数据约束。

总结

核心逻辑:按类别拆分问题,每个类别独立构造错排,累加各类别最小交换次数。
关键操作:哈希表统计类别大小、单元素类别判无解、按公式计算每类交换次数。
效率保障:线性遍历统计,常数级公式计算,无冗余运算,轻松处理十万级数据。

代码简要说明

  1. 输入处理:读取数组长度与元素值(元素值本身不影响结果,仅需类别信息),用哈希表统计每个类别的元素数量。
  2. 无解判断:遍历哈希表,若存在类别大小为1,直接返回-1
  3. 累加计算:对每个类别计算(c+1)/2并累加到总答案,最终输出总和。
  4. 优化说明:使用unordered_map实现线性统计,全程仅需一次遍历,效率极高。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;llsolve(){ll ans=0,n;cin>>n;unordered_map<ll,ll>mp;for(ll i=0;i<n;i++){ll x;cin>>x;}for(ll i=0;i<n;i++){ll x;cin>>x;mp[x]++;}for(auto[_,c]:mp){if(c==1)return-1;ans+=(c+1)/2;}returnans;}intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cout<<solve()<<endl;return0;}
http://www.rkmt.cn/news/1522646.html

相关文章:

  • QQ机器人插件安装避坑指南:从NoneBot插件商店到一键部署的完整流程
  • 2026白城本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 闲置黄金出手攻略,天津高口碑回收门店推荐 - 讯息早知道
  • 如何快速上手AzurLaneAutoScript:面向新手的完整自动化指南
  • 明码标价现场结算,合肥让人放心的名表回收点 - 讯息早知道
  • 2026常州本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • MC92604双模SerDes/PHY芯片:高速互联设计中的灵活性与实战指南
  • 2026大兴安岭市民高频光顾的 5 家线下黄金回收白银铂金回收实体店实地走访测评 - 中安检金银铂钻回收
  • 深入解析MC68349异常处理:从原理到实战调试技巧
  • 2026 广州奢侈品黄金回收店|大额高净值交易安全隐私深度评测,耀辉高净值资产处置首选标杆 - 奢侈品回收
  • 2026达州本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 避坑指南:Java整合海康SDK与ZLM4J做录像回放时,如何解决跳帧和音画同步问题?
  • 别再用kubectl set image了!聊聊K8s Deployment滚动更新的5种姿势与最佳实践
  • 还在纠结Activiti版本?从5到7,我踩过的坑和最终选择
  • 2026北京本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 2026年东莞SCMP供应链管理专家班期怎么查询和确认?众智商学院官网400和冯老师报名入口 - 众智商学院职业教育
  • LenovoLegionToolkit终极指南:拯救者笔记本轻量级控制中心完全手册
  • 联想笔记本升级M.2 SSD避坑指南:从选盘(海康威视CC300)、分区到BIOS设置(GPT/MBR)全流程
  • 手把手教你用SeaweedFS Filer搭建一个兼容POSIX和S3的‘两用’存储网关(附MySQL元数据配置)
  • 从雷达工程师视角看:DBF、CAPON、MUSIC这些DOA算法,在实际项目中到底怎么选?
  • 别再只收邮件了!手把手教你给Zabbix 6.0配上企业微信告警(附脚本和消息模板)
  • 探索猫抓Cat-Catch:浏览器异步资源捕获机制的技术深度解析
  • 2026百色本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • PotPlayer字幕翻译插件终极指南:免费实现双语字幕的完整教程
  • ClickHouse系统日志TTL配置全攻略:从config.xml修改到表结构变更(附避坑点)
  • 从Davinci到ISOLAR:手把手教你搞定AUTOSAR数据库(DBC/ARXML)导入的实战差异
  • 告别虚拟机卡顿:在云服务器(Ubuntu 22.04)上部署CobaltStrike 4.9实战指南
  • 5分钟快速解密网易云NCM音乐:ncmdump完整使用指南
  • 从ViT到Vim:状态空间模型(SSM)如何重塑视觉骨干网络?技术演进与选型思考
  • 除了石墨烯,二维材料还有哪些‘潜力股’?以二硫化铼为例聊聊TMDCs的选材逻辑