尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
A. Another Puzzle from Papyrus(Codeforces 2238)
A. Another Puzzle from Papyrus题意简述给定两个长度为n的数组a和b。可以执行两种操作选择一个位置i把a_i减少1代价为1任意重排整个数组a代价为c。要求把a变成b求最小总代价如果无法做到输出-1。核心观察1. 减法总次数是固定的如果某个方案可行最终数组和一定从sum(a)变为sum(b)。每次减法只会让总和减少1所以无论中间怎么重排减法次数一定是sum(a) - sum(b)如果sum(a) sum(b)因为不能增加数字直接无解。2. 重排最多只需要做一次重排不会改变数值只会改变元素顺序。如果决定使用重排那么可以一开始就把元素调整到最合适的位置然后再做减法。多次重排只会多花c不会减少减法总次数所以只需要考虑两种情况方案 1不重排 方案 2重排一次情况一不重排不重排时第i个元素只能变成第i个目标值。因此必须满足a_i b_i 对所有 i 成立如果成立代价就是sum(a) - sum(b)示意a: 4 5 2 3 | | | | b: 3 5 1 2 每一列都要求上面的数 下面的数。情况二重排一次重排后本质上是在问能不能把a中的每个数分配给b中的一个数使得被分配的a不小于对应的b最简单可靠的判断方法是把两个数组都排序然后小的配小的。sort(a): a_1 a_2 ... a_n sort(b): b_1 b_2 ... b_n如果对所有位置都有sort(a)[i] sort(b)[i]则重排后可行。为什么小配小是对的目标 b 越小越容易被满足。 如果最小的 a 连最小的 b 都满足不了 那它也不可能满足更大的 b。所以排序后一一比较就能判断是否存在一种合法匹配。如果可行代价为c sum(a) - sum(b)其中c是一次重排代价后面是固定的减法次数。算法流程对每组测试数据读入n, c, a, b如果sum(a) sum(b)输出-1计算固定减法代价decCost sum(a) - sum(b)检查不重排是否可行若可行用decCost更新答案排序a和b检查重排一次是否可行若可行用c decCost更新答案如果两个方案都不可行输出-1否则输出最小答案。图表示意策略判断条件代价不重排每个位置a_i b_isum(a) - sum(b)重排一次排序后每个位置sort(a)[i] sort(b)[i]c sum(a) - sum(b)以样例第一组为例a [5, 2, 3] b [2, 3, 4] 不重排 位置 2: 2 3不可行 重排 sort(a) [2, 3, 5] sort(b) [2, 3, 4] 每个位置都满足 代价 c (sum(a) - sum(b)) 5 (10 - 9) 6易错点不要只判断sum(a) sum(b)。总和够不代表一定可行例如小元素可能无法匹配较大的目标。重排代价最多加一次。多次重排没有任何收益。判断重排可行时要把a和b都排序而不是只排序一个数组。即使重排可行也要和“不重排”的答案取最小值因为不重排可能更便宜。复杂度分析每组测试数据排序一次时间复杂度O(n log n) 空间复杂度O(n)本题n 100复杂度非常充足。C 代码实现#includebits/stdc.husingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intT;cinT;while(T--){intn;longlongc;cinnc;vectorinta(n),b(n);longlongsumA0,sumB0;for(inti0;in;i){cina[i];sumAa[i];}for(inti0;in;i){cinb[i];sumBb[i];}constlonglongINF(1LL60);longlongansINF;// 如果总和都不够减法无法让 a 变大直接无解。if(sumAsumB){cout-1\n;continue;}// 任意可行方案中减法次数都是固定的。longlongdecCostsumA-sumB;// 方案 1不重排。// 每个位置必须能从 a[i] 减到 b[i]。boolokSameOrdertrue;for(inti0;in;i){if(a[i]b[i]){okSameOrderfalse;break;}}if(okSameOrder){ansmin(ans,decCost);}// 方案 2重排一次。// 排序后小配小如果每一对都满足 sa[i] sb[i]就存在合法匹配。vectorintsaa,sbb;sort(sa.begin(),sa.end());sort(sb.begin(),sb.end());boolokAfterReordertrue;for(inti0;in;i){if(sa[i]sb[i]){okAfterReorderfalse;break;}}if(okAfterReorder){ansmin(ans,cdecCost);}cout(ansINF?-1:ans)\n;}return0;}
RELATED

相关推荐

若依系统 4.7.6 版本定时任务 RCE 漏洞:从 SQL 注入到 JNDI 注入的完整利用链分析

若依系统 4.7.6 版本定时任务 RCE 漏洞:从 SQL 注入到 JNDI 注入的完整利用链分析

若依系统4.7.6版本定时任务RCE漏洞深度剖析:从SQL注入到JNDI注入的完整攻击链 在Java企业级应用开发领域,若依(RuoYi)作为一款基于SpringBoot的快速开发框架,凭借其丰富的功能模块和简洁的代码结构,已成为国内众多企业和机构的首选…

📅 2026/10/31 4:31:58
PIC32MZ与DTH-08信号上拉下拉配置实践

PIC32MZ与DTH-08信号上拉下拉配置实践

1. 项目背景与硬件选型解析 在嵌入式系统设计中,信号状态控制是基础但至关重要的环节。这次我们要探讨的是使用DTH-08模块配合PIC32MZ1024EFF144单片机实现信号上拉/下拉状态切换的方案。这个组合在工业控制、仪器仪表等领域有广泛应用场景。 PIC32MZ1024EFF144是M…

📅 2026/9/27 15:21:07
报名投票想一站式?这款投票系统报名+投票全流程搞定

报名投票想一站式?这款投票系统报名+投票全流程搞定

办过评选活动的人都知道,先拉群收集报名信息、再手动整理名单、另外开个投票链接,最后还要人工核对票数——流程割裂又费时,还容易出错。其实现在用「天天评选」这类一站式投票系统,报名和投票可以直接合并成一个活动,…

📅 2026/10/16 3:11:03
MORE NEWS

更多资讯

📰

没毕业证能考电工证 但含金量决定你能不能干这行

没毕业证能考电工证 但含金量决定你能不能干这行 证书过期了不知道怎么复审延期?别急,这期咱们就来聊聊 没毕业证能考电工证 的真相,以及如何提升证书的 含金量 ,让你在洛阳建筑工地上稳稳当当、不被清退。…

📰

建筑电工证考试模拟在哪考?别让实操考试吓退你

建筑电工证考试模拟在哪考?别让实操考试吓退你 你是不是也这样,站在建筑电工证实操考试现场,手心出汗,心跳加速,心里直打鼓:“这考试到底考什么?我是不是准备得不够?会不会挂科?”别急,咱们今天就聊聊 建筑电工证考试模拟 ,还有你最关心的“…

📰

焊割工特种作业证图最新政策解读良心建议

焊割工特种作业证图最新政策解读良心建议 不知道去哪报名怕被中介坑?别慌,焊割工特种作业证图是你必须搞懂的硬知识,特别是在洛阳这样的建筑大市,没有这张证,连工地的门都进不去。本文从政策变化、违规问题、报考流程到备考建议,给你 良心建议…

📰

枣庄市高压电工证报名在哪考实操考试心里没底怕挂科怎么办

枣庄市高压电工证报名在哪考实操考试心里没底怕挂科怎么办 你不是一个人,很多想报名枣庄市高压电工证的朋友都担心实操考试心里没底怕挂科。尤其是像你这样已经在鹤壁从事水利工程的从业者,想要跨省转介办理证书,心里更没底了。实操考试虽然不像理论考试那…

📰

淮安电工证报名网址全国通用吗?外省证书怎么转过来

淮安电工证报名网址全国通用吗?外省证书怎么转过来 之前考的证在外省能不能转过来?这是很多在外地打工、打算回老家发展的电工从业者最关心的问题。尤其像你这种在鹤壁劳务班组长期作业的电工,可能在外地考了证,回到淮安后却面临证书不被认可的尴尬局面。…

📰

低压电工证换证材料怎么准备 上岗必备全攻略

低压电工证换证材料怎么准备 上岗必备全攻略 之前考的证在外省能不能转过来?这几乎是所有想从事低压电工工作的朋友最关心的问题。尤其像三门峡这样的地区,不少电工证是在外省考的,回来后能不能用、怎么换、需要哪些材料,成了很多人上不了岗的“拦路虎”…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬