专栏文章
题解:CF377E Cookie Clicker
CF377E题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @miqi9ihg
- 此快照首次捕获于
- 2025/12/04 05:14 3 个月前
- 此快照最后确认于
- 2025/12/04 05:14 3 个月前
除排序外线性做法。
参考了 大神的题解:文章链接。
我们发现,有一些工厂一定是不优的:按照 升序( 相同按照 降序)排序后, 的一定是可以删除的。
之后我们就得到了一个 和 都严格上升的序列。
现在设函数:
。
横坐标为时间 ,纵坐标是金币数 。
容易发现,我们的操作顺序总是先取 小的,直到钱够了再取大的。
又有贪心结论:一个工厂如果被购买,则一定在能取用的第一时间(即当前总金币数 时)购买启动。
易知 是单调递增,且下凸的。
初始时 为一条直线 。
有了这个这两个结论,我们可以考虑增量构造函数 。
首先我们从工厂 开始,顺序构造(大的一定在后面,以这个基础确定第一次出现的位置)。
每次对于当前的工厂,找到最早的时间 使得 ,这就是本工厂的启动时间,根据贪心结论,这个时间的固定的。
再确定这个工厂能影响的区间:
把这个区间全部变为这条直线就可以了。
由于整个函数是由很多直线(射线)构成的,使用单调栈维护就行,每次从栈底向顶找 ,再把栈顶不优的全部弹掉,由于 ,所以栈底指针也是单调增的(注意边界情况,实际写的时候最好找到了之后
bottom--)。复杂度线性对数,瓶颈在于排序,实测跑得比二分快 。
最后扫一遍函数找到第一个 的位置就好了。
P.S. 实际上本题对于下凸性质并没有利用,而是利用了单调性。
Code。
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...
