题解:AT_nikkei2019_final_d Deforestation
题解:AT_nikkei2019_final_d Deforestation
xyx404题目:
在我写题解时题目翻译有错误,故此处放上简略的正确翻译。
有 根竹子,编号从 到 。初始时,所有竹子的高度是 ,时间每过一秒,每根竹子的高度增加 。
有 个砍伐计划,第 个计划在 时,将砍掉编号在 和 之间的竹子。当竹子砍下时高度为 时,会得到 的竹子。被砍掉的竹子高度将变为 ,之后还会生长。
求可以得到多少竹子。
完整题目,点击此处。
思路:
因为每过一秒高度都会增加一,且砍后会继续生长,所以我们可以只计算第 个竹子最后是在什么时候被砍掉的,这个时间就是这个竹子的高度。
实现,在输入后我们可以直接从最后开始向前遍历,因为题目满足输入的时间 一定小于等于 。
定义一个 set
,类型为 int
,名字叫 ,用来标记这个竹子有没有砍过。
用 lower_bound
函数查找在 里第一个大于等于 的值的位置,然后遍历编号在 和 之间的竹子,加上现在的时间也就是可以从竹子身上得到的竹子,并把这个竹子从 里删除。
代码:
|
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果