POI每日一题 #2 SAM-Toy Cars
Posted hjmmm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POI每日一题 #2 SAM-Toy Cars相关的知识,希望对你有一定的参考价值。
取下哪一个玩具由数据而定
这道题关键点就在于把哪一个玩具放回柜子上
关注一个玩具放回后对之后玩具的影响
显然要放回下一次用的时间(next)最靠后的那一个
算法选择:对于贪心取元素,选择堆
又懒得手写。。。所以用优先队列啦
这里复习一下优先队列吧
还有就是一些算法细节
一个要用的玩具如果本来就在地上的话
需要更新它的next
但是在堆里查找修改很是麻烦(其实是蒟蒻不会
解决方法:
把当前点插入堆
原来的那个点的next肯定是不会再被找到啦
(因为现在找到i 更新完i后 next值大于i的点就有k个
(每次找next最大的 所以肯定不会找到原来的点
但这样就占了个限制内的位置啊
莫方 因为原来的点一定不会被访问 也不会被弹出
所以把它当作空占位的“僵尸点” 把限制k++就好啦
代码:
1 for(int i = 1; i <= p; i++){ 2 if(inq[a[i]]){ 3 q.push(i); 4 m++; continue; 5 } 6 if(q.size() == m){ 7 int tp = q.top(); q.pop(); 8 inq[a[tp]] = 0; 9 } 10 ans++; 11 q.push(i); 12 inq[a[i]] = 1; 13 }
以上是关于POI每日一题 #2 SAM-Toy Cars的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ 1528 1528: [POI2005]sam-Toy Cars (贪心+堆)