【数学】P9667 [ICPC2022 Jinan R] Tower|普及+
本文涉及知识点数学[ICPC2022 Jinan R] Tower题面翻译题目描述庞教授搭了n nn座不同高度的塔。第i ii座塔的高度是a i a _ {i}ai​。寿教授不喜欢这些参差不齐的塔。他决定先去掉它们中的m mm座然后执行以下操作中的一些或不执行选择一座塔并增加它1 11个单位高度。选择一座塔并减少它1 11个单位高度。选择一座塔并把它的高度a i a _ {i}ai​除以2 22如果它不是整数的话向下取整。寿教授永远不会选择被拆除的塔。如果操作后塔的高度变为0 00则不允许操作。在这些约束条件下寿教授可以按任意顺序执行任意数量的运算。寿教授希望所有没有被拆除的塔都有相同的高度a i a _ {i}ai​。请计算实现此目标的最小操作次数。输入格式第一行是一个整数T ( 1 ⩽ T(1\leqslantT(1⩽T TT⩽ \leqslant⩽10 ) 10)10),表示有T TT组数据。对于每组测试数据第一行包括两个整数n , m ( 1 ⩽ n,m (1\leqslantn,m(1⩽n nn⩽ \leqslant⩽500 500500, ,,0 00⩽ \leqslant⩽m mm⩽ \leqslant⩽n nn) ))表示塔的数量以及寿教授在执行操作之前应该删除的塔的数量。下一行包括n nn个整数a 1 , … , a n ( 1 ⩽ a _ {1},\dots,a _ {n} (1\leqslanta1​,…,an​(1⩽a i a _ {i}ai​⩽ \leqslant⩽10 9 ) 10^9)109)表示塔的最初高度。输出格式对于每组测试数据在一行中输出最小操作数。题目描述Prof. Pang builtn nnblock towers with different heights. Thei ii-th tower has heighta i a_iai​.Prof. Shou doesn’t like these towers because of their arbitrary heights. He decides tofirst remove exactly m of them \textbf{first remove exactly \textit{m} of them}first remove exactlymof them, and then perform some (or none) of the following operations:Choose a tower and increase its heighta i a_iai​by1 11.Choose a tower and decrease its heighta i a_iai​by1 11.Choose a tower and divide its heighta i a_iai​by2 22. If the new height is not an integer, it is rounded down.Prof. Shou can never choose a removed tower. If after an operation, the height of a tower will become0 00, that operation is not allowed. Under these constraints, Prof. Shou can perform an arbitrary number of operations in arbitrary order.Prof. Shou would like all the towers that are not removed to have the same heights. Please calculate the minimum number of operations to achieve this.输入格式The first line contains one integerT ( 1 ≤ T ≤ 10 ) T~(1\le T \le 10)T(1≤T≤10), the number of test cases.For each test case, the first line contains two integersn , m ( 1 ≤ n ≤ 500 , 0 ≤ m n ) n, m~(1\le n\le 500, 0\le m n)n,m(1≤n≤500,0≤mn), the number of towers, and the number of towers Prof. Shou should delete before performing the operations.The next line containsn nnintegersa 1 , … , a n ( 1 ≤ a i ≤ 10 9 ) a_1,\ldots, a_n~(1\le a_i\le 10^9)a1​,…,an​(1≤ai​≤109), the initial heights of the towers.输出格式For each test case, output the minimum number of operations in one line.样例 #1样例输入 #13 2 0 2 6 5 0 1 2 3 4 5 5 3 1 2 3 4 5样例输出 #12 4 1数学f(x) 将任意N-M的塔的高度改成x的最小成本。m max(a)。性质一存在最优解除2之前没有加减法。x1)/2和(x-1)/2和x/2相等或相差1。如果相差1除以2之后再加减是不劣解。如果相等移到除2外是更优解。性质二x除2 i1次后是x1x2x1/2。则任意x3∈ \in∈[x1,x2]$的最优解是 min(i1x3-x1,i11x2-x3)。性质三i1x3-x1 i11x2-x3⟺ \iff⟺2x3 1x2x1x4 1x1x2如果x4是偶数x x4/2 i1x3-x1 是更优解否则i11x2-x3 是更优解。如果x4是奇数也是如此。推论一x∈ \in∈[x1,x4/2] x,则f(x)也加1。x∈ \in∈[x4/x1,x3]。x则f(x)减1。我们将所有的x1,x2,x4/2,x4/21放到有序集合s中。x5,x6是s中任意两个相邻元素x5x6。结论一任意x∈ \in∈[x5,x6]。f(x) min(f(x5),f(x6))。证明根据推论一任意塔在[x5,x6]要么递增要么递减。如果递增的数量大于等于抵减的数量则f(x5)是区间最优解。否则f(x6)是区间最优解。如果最终高度在[0,M]则结果一定在s中。如果最终高度 M则劣于M。结论只需要枚举s中的高度数量nlog(M)。时间复杂度O(Tnlog(M)(nlogM))在超时的边缘f(x)利用缓存要少量优化空间。本题超时时间是6s而不是1秒。优化最小的N-M个f(j,i)不用排序直接用nth。b[i]记录a[i] ,a[i]/2 ,a[i]/4⋯ \cdots⋯降序。通过target从大到小枚举s如果b[i][v.size()-2]大于 target b[i].pop_back()时间复杂度O(Tnlog(M)n)代码核心代码#includeiostream#includesstream#includevector#includemap#includeunordered_map#includeset#includeunordered_set#includestring#includealgorithm#includefunctional#includequeue#includestack#includeiomanip#includenumeric#includemath.h#includeclimits#includeassert.h#includecstring#includelist#includebitsetusingnamespacestd;templateclassT1,classT2std::istreamoperator(std::istreamin,pairT1,T2pr){inpr.firstpr.second;returnin;}templateclassT1,classT2,classT3std::istreamoperator(std::istreamin,tupleT1,T2,T3t){inget0(t)get1(t)get2(t);returnin;}templateclassT1,classT2,classT3,classT4std::istreamoperator(std::istreamin,tupleT1,T2,T3,T4t){inget0(t)get1(t)get2(t)get3(t);returnin;}templateclassTintvectorTRead(){intn;scanf(%d,n);vectorTret(n);for(inti0;in;i){cinret[i];}returnret;}templateclassTintvectorTRead(intn){vectorTret(n);for(inti0;in;i){cinret[i];}returnret;}classSolution{public:longlongAns(vectorinta,constintM){constintNa.size();setints;s.emplace(0);vectorvectorpairint,intb;for(autoi:a){vectorinttmp;while(i){tmp.emplace_back(i);intx4i(i/2)1;s.emplace(x4/2);s.emplace(x4/21);s.emplace(i);i/2;}tmp.emplace_back(0);b.emplace_back();for(intjtmp.size()-1;j0;j--){b.back().emplace_back(tmp[j],j);}}longlongansLLONG_MAX/2;for(autoits.rbegin();it!s.rend();it){constinttarget*it;vectorintcur;for(intj0;jN;j){autovb[j];while((v.size()2)(v[v.size()-2].firsttarget)){v.pop_back();}constinttmp1abs(v.back().first-target)v.back().second;inttmp2INT_MAX/2;if(v.size()2){tmp2abs(v[v.size()-2].first-target)v[v.size()-2].second;}cur.emplace_back(min(tmp1,tmp2));}nth_element(cur.begin(),cur.begin()N-M-1,cur.end());longlongcurAnsaccumulate(cur.begin(),cur.begin()N-M,0LL);ansmin(ans,curAns);}returnans;}};intmain(){#ifdef_DEBUGfreopen(a.in,r,stdin);#endif// DEBUGintT;cinT;for(inti0;iT;i){intn,m;cinnm;autoaReadint(n);autoresSolution().Ans(a,m);coutresendl;}#ifdef_DEBUG//printf(K%d, K);//Out(b, b);//Out(strs, ,strs);#endif// DEBUGreturn0;}单元测试vectorinta;intM;TEST_METHOD(TestMethod11){a{2,6},M0;autoresSolution().Ans(a,M);AssertEx(2LL,res);}TEST_METHOD(TestMethod12){a{1,2,3,4,5},M0;autoresSolution().Ans(a,M);AssertEx(4LL,res);}TEST_METHOD(TestMethod13){a{1,2,3,4,5},M3;autoresSolution().Ans(a,M);AssertEx(1LL,res);}} TEST_METHOD(TestMethod13) { a { 1,2,3,4,5 }, M 3; auto res Solution().Ans(a, M); AssertEx(1LL, res); }

相关新闻

游戏引擎对象与资源解耦设计实战:稳快省三原则

游戏引擎对象与资源解耦设计实战:稳快省三原则

1. 这不是教科书,是引擎开发现场的“对象-资源”生死线你写完一个角色类,new 出来扔进场景,跑两帧就卡顿;美术塞进来的20482048贴图,加载时内存暴涨300MB,然后在低端机上直接OOM崩溃;策划改了十…

2026/10/9 1:23:56 阅读更多 →
我的另一端使用RS422,我使用usb转接485的转接器,结果我只能接入收的线,如果接入发的线,则接收的字节流出现错误,后来改成usb转接422的转接器,收发都正常了。

我的另一端使用RS422,我使用usb转接485的转接器,结果我只能接入收的线,如果接入发的线,则接收的字节流出现错误,后来改成usb转接422的转接器,收发都正常了。

你帮我重新描述下我的提问,我觉得用词不太好对端是 RS-422 四线全双工设备。我先用 USB 转 RS-485 连接,只接对端发送差分线时 PC 能正常接收;再把对端接收差分线也接上后,PC 接收数据就出错。改用 USB 转 RS-422 后收发正常。请问…

2026/10/9 1:23:56 阅读更多 →
Incus 安全加固指南:守护进程访问控制、容器隔离与网络防欺骗配置详解

Incus 安全加固指南:守护进程访问控制、容器隔离与网络防欺骗配置详解

后端虚拟化容器运行时 【免费下载链接】incus Powerful system container and virtual machine manager 项目地址: https://gitcode.com/gh_mirrors/inc/incus 点击查看 免费下载 导读 本文以 Incus 官方安全说明文档 doc/explanation/security.md 为骨架&#x…

2026/10/9 1:22:56 阅读更多 →

最新新闻

美妆品牌选择零售系统:需要规避的5个常见认知偏差|上海秉坤

美妆品牌选择零售系统:需要规避的5个常见认知偏差|上海秉坤

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 1:54:16 阅读更多 →
Java进阶面试高频考点全解析:从基础到JVM并发与框架

Java进阶面试高频考点全解析:从基础到JVM并发与框架

做了这么多年Java,面试被问过,也坐在桌子对面当过面试官。每次看到大家疯狂搜索“java面试题”“java八股文”这种热词,我都想说一句:别急着背,先想清楚面试官到底在考什么。Java进阶面试从来不是靠刷题量堆出来的&…

2026/10/9 1:54:16 阅读更多 →
OpenSquilla 0.4.0 上手实测:3 个核心变化让 AI 代码学会“自证清白”,Token 成本直降 80% 的 TaoToken 配置复盘

OpenSquilla 0.4.0 上手实测:3 个核心变化让 AI 代码学会“自证清白”,Token 成本直降 80% 的 TaoToken 配置复盘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 1:54:16 阅读更多 →
Foldra无线私有云:像本地文件夹一样访问的无线存储方案

Foldra无线私有云:像本地文件夹一样访问的无线存储方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 1:54:16 阅读更多 →
pick_and_place_with_2d_matching_moving_cam.hdev *眼在手上 2D匹配,3D抓取【案例解析】

pick_and_place_with_2d_matching_moving_cam.hdev *眼在手上 2D匹配,3D抓取【案例解析】

prepare_poses_and_rectification_data_moving_cam函数解析这段代码的核心价值功能说明位姿准备构建与图像对齐的匹配平面,并考虑物体高度Z轴方向校正确保平面法向量朝向合理(避免背面)自适应分辨率通过投影点拟合自动确定校正尺度高效校正预…

2026/10/9 1:54:16 阅读更多 →
Red Mad Robot(red_mad_robot)Робопрактика 前端测试任务:用 React 构建员工社交网络用时统计表格

Red Mad Robot(red_mad_robot)Робопрактика 前端测试任务:用 React 构建员工社交网络用时统计表格

教程 【免费下载链接】ru-test-assignments Тестовые задания для самостоятельного выполнения от разных it компаний 项目地址: https://gitcode.com/gh_mirrors/ru/ru-test-assignments 点击查看 …

2026/10/9 1:53:16 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →