十三届蓝桥杯-砍竹子

文章介绍了一种使用优先队列和特殊存储技巧解决的砍竹问题,目标是找出最少魔法步骤使所有竹子高度相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4409. 砍竹子

这天,小明在砍竹子,他面前有 n棵竹子排成一排,一开始第 i棵竹子的高度为 ℎi。

他觉得一棵一棵砍太慢了,决定使用魔法来砍竹子。

魔法可以对连续的一段相同高度的竹子使用,假设这一段竹子的高度为 H,那么使用一次魔法可以把这一段竹子的高度都变为\left \lfloor \sqrt{\left \lfloor \frac{H}{2} \right \rfloor+1} \right \rfloor,其中 表示对 x 向下取整。

小明想知道他最少使用多少次魔法可以让所有的竹子的高度都变为 1。

输入格式

第一行为一个正整数 n,表示竹子的棵数。

第二行共 n个空格分开的正整数 ℎi,表示每棵竹子的高度。

输出格式

一个整数表示答案。

数据范围

对于 20%的数据,保证 1≤n≤1000,1≤hi≤10^6
对于 100%的数据,保证 1≤n≤2×105,1≤hi≤10^18

输入样例:
6
2 1 4 2 6 7
输出样例:
5
样例解释

其中一种方案:

  2 1 4 2 6 7
→ 2 1 4 2 6 2
→ 2 1 4 2 2 2
→ 2 1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值