当前位置: 首页 > 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.jsqmd.com/news/1010834/

相关文章:

  • 2026巴中本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 河南郑州GEO服务商选择指南
  • 2026 广州奢侈品黄金回收店|耀辉无损鉴定设备实测解析 - 奢侈品回收
  • 2026楚雄本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 别再踩坑了!WSL2下CUDA安装保姆级教程(从驱动检查到环境变量配置)
  • 如何快速上手AzurLaneAutoScript:面向新手的完整自动化指南
  • 闲置黄金出手攻略,天津高口碑回收门店推荐 - 讯息早知道
  • 2026白城本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 2026丹东市民高频光顾的 5 家线下黄金回收白银铂金回收实体店实地走访测评 - 中安检金银铂钻回收
  • 2026大同市民高频光顾的 5 家线下黄金回收白银铂金回收实体店实地走访测评 - 中安检金银铂钻回收
  • 5分钟终极指南:用BepInEx游戏插件框架解锁无限游戏扩展能力
  • 2026定西本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 中山优才教育联系方式怎么查?人工智能应用工程师报名 - 人工智能报名机构推荐
  • 2026巴中市民高频光顾的 5 家线下黄金回收白银铂金回收实体店实地走访测评 - 中安检金银铂钻回收
  • NVIDIA Profile Inspector:如何解锁官方控制面板之外的200+显卡隐藏设置?
  • 明码标价现场结算,合肥让人放心的名表回收点 - 讯息早知道
  • MC68360用户手册勘误深度解析:嵌入式硬件开发避坑指南
  • 2026贵州本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 2026常州本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 2026贵港本地贵金属变现门店精选前五+黄金铂金白银金条回收合规商家名录 含地址电话 - 诚金汇钻回收公司
  • 2048经典小游戏收藏
  • 2026北京市民高频光顾的 5 家线下黄金回收白银铂金回收实体店实地走访测评 - 中安检金银铂钻回收
  • 2026阿坝市民高频光顾的 5 家线下黄金回收白银铂金回收实体店实地走访测评 - 中安检金银铂钻回收
  • 2026年 PFA隔膜阀/苏州隔膜阀厂家:高纯耐腐蚀性能与精密流体控制专业之选 - 品牌发掘
  • 2026上海奢侈品黄金回收细节封神榜!这家平台凭细节碾压全场 - 奢侈品回收
  • 从微信小程序到Python:5种跨平台连接JDY-08蓝牙模块的方案实测与选型建议
  • 2026年 江苏复合钢丝网/高精密网版厂家推荐榜:源头实力与工艺精度深度解析 - 品牌发掘
  • Vue+Golang实战:手把手教你给AI网站接入微信Native扫码支付(附完整代码)
  • MC92604双模SerDes/PHY芯片:高速互联设计中的灵活性与实战指南
  • 2026大兴安岭市民高频光顾的 5 家线下黄金回收白银铂金回收实体店实地走访测评 - 中安检金银铂钻回收