B. 折半功率对齐
折半功率对齐
秋招模拟赛第29场|携程实习|2023.05.25
- Status
- Done
- Rule
- IOI
- Problem
- 3
- Start at
- 2023-6-19 19:00
- End at
- 2023-6-19 20:30
- Duration
- 1.5 hour(s)
- Host
- Partic.
- 11
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
每次只能把某个正数变成 ⌊x/2⌋,数值单调不增。最终所有数相等时,一定是当前最大值被不断折半,直到与最小值对齐;过程中最小值也可能因为某次折半而下降,此时其他数还要继续追赶。
用大根堆维护当前所有数,并动态记录最小值。反复取出最大值:
地面光伏电站有 n 个子阵,第 i 个当前出力为 ai。一次调节可以选择一个出力仍为正的子阵,把它的出力替换成该数除以 2 后向下取整的结果。调度希望所有子阵出力完全相等,以便并网。
请计算最少多少次调节后,这 n 个出力全部相等。
约束:1≤n≤105,1≤ai≤1000000000。
第一行包含一个正整数 n,表示子阵个数,满足 1≤n≤105。
第二行包含 n 个正整数 a1,a2,…,an,满足 1≤ai≤1000000000。
输出一个整数,表示使所有数相等的最少操作次数。
输入
3
7 8 9
输出
8
说明
每次对当前最大值执行一次折半,并用堆维护最大值,直到最大值与最小值相等。
该组数据最少需要 8 次操作。
输入
2
5 5
输出
0
说明
两个数已经相等,无需操作。
输入
5
16 8 4 2 1
输出
10
说明
最终所有数都会被折半到 1。对较大的数需要多次除 2,总次数为 10。
输入
4
10 10 9 3
输出
10
说明
最小值会在过程中继续下降,需要继续折半较大值去追齐,最少操作次数为 10。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册