老司机的毒奶 贪心+二叉树+优先队列
Source
2017 UESTC Training for Data Structures
My Solution
题意:给出n个不同的数,每个数可以最多进行ki次操作,每次操作 ai/2。每次操作后n个数必须互不相等。
求max{ai}(1<=i<=n)的最小值。
贪心+二叉树+优先队列
ai的k次ai/2的操作,刚好像是在二叉树上走,也就是这n个数可以丢到一个二叉树里,每次把编号最大的节点,
往根的方向走,需找一个没有被标记过的节点,找到最近的一个可行节点则本次操作成功,继续处理新的最大值。
故把所有暂时存在的数用map<int, bool> mp标记,且把所有的数丢到优先队列里,
每次取出最大的,判断是否存在k, x = pq.top()>>k,x没有被标记过。
则mp[pq.top()] = false; mp[x] = true;然后pop后把x丢入pq,继续判断新的top。
如果不能继续操作了,则结束循环。
最后留下的pq.top()就是答案了。
#include
#include
#include
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
如经许可后转载,请注明出处:https://prolightsfxjh.com/article/uestc-1595/
共有 0 条评论