CSU1306:Manor(优先队列)】的更多相关文章

Description Bob有n个正整数,他将这n个整数根据大小划分成两部分.对于小于等于k的整数放在集合A中,其余的放在集合B中.每次他从集合B中取出一个最大的值,将其变成0放入A集合中.然后将A集合中所有的元素都增加a,如果此时A中元素大于k,那么要将该元素放入B中,同时将B集合中剩余的元素都增加b.Bob现在想知道经过m次操作后,B集合中元素的个数. Input 有多组测试数据. 每组测试数据的第一行为4个整数n,k,a,b,n<=100000,k<=10^3,a,b<=100,…
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1306 解题思路:唬人的水题,只要按照他的意思打,就能过,不过,数组最好开大点.用到优先队列,也可以用栈来处理. 总元素就只有N个,再怎么挪,总个数也不会变化.处理的时候B中的值虽说要加b,但是,不管加成什么样子,最后要放到A里面去的时候还是要变成0,完全不用管它的值有多大.A里面的元素,有要进来的(都是0),有要出去的(大于K),还要每次加a. 所以,我们可以只处理A中得元素,[B中元素的个数]…
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1306 1306: Manor Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 125  Solved: 35 [Submit][Status][Web Board] Description Bob有n个正整数,他将这n个整数根据大小划分成两部分.对于小于等于k的整数放在集合A中,其余的放在集合B中.每次他从集合B中取出一个最大的值,将其变成0放入A…
1. 预备知识 (1) 基本概念     如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组A包括两个属性:A.length给出了数组的长度:A.heap-size表示有多少个堆元素保存在该数组中(因为A中可能只有部分位置存放的是堆的有效元素).     由于堆的这种特殊的结构,我们可以很容易根据一个结点的下标i计算出它的父节点.左孩子.右孩子的下标.计算公式如下: parent(i) =…
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author: Minion-Xu #list实现优先队列 class ListPriQueueValueError(ValueError): pass class List_Pri_Queue(object): def __init__(self, elems = []): self._elems = list(elems) #从大到小排序,末尾值最小,但优先级最高,方便弹出且效率为O(1) self.…
打印列表的疑问 class Node: def __str__(self): return "haha" print([Node(),Node()]) print(Node()) 输出为 [<__main__.Node object at 0x000000000311A208>, <__main__.Node object at 0x000000000311A358>] haha 打印列表调用的不是每个元素str吗?看来不是,那调用的是什么. 一个简单的实例 在…
山治的婚约 Description 我们知道,山治原来是地下有名的杀人家族文斯莫克家族的三子,目前山治的弟弟已经出现,叫做四治,大哥二哥就叫汪(One)治跟突(Two)治好了(跟本剧情无关) .山治知道自己跟夏洛特家族有婚约之时,决定参加大妈的茶会,跟父亲做个了断.然而夏洛特公主早已看穿了一切,她给山治出了个难题,如果山治能够解决难题,夏洛特公主就帮助山治解除婚约.公主安排了 N 只拿着蛋糕的猴子,排成一列,每只猴子都有自己的初始位置 Pi 和行动量 Di,山治从前往后夺取猴子的蛋糕,因为光谱踢…
按照Java api的说法: java.util.PriorityQueue.PriorityQueue() Creates a PriorityQueue with the default initial capacity (11) that orders its elements according to their natural ordering. 优先队列PriorityQueue的默认排序方式为其中元素的自然顺序.下面利用这一特点,把它当成个小顶堆来求出数组中的前k大元素 packa…
首先把所有的字符加入到优先队列,然后每次弹出两个结点,用这两个结点作为左右孩子,构造一个子树,子树的跟结点的权值为左右孩子的权值的和,然后将子树插入到优先队列,重复这个步骤,直到优先队列中只有一个结点为止,这个结点就是最终哈夫曼树的根结点. 在定义指针类型的优先队列priority_queue<node*>的时候,需要注意,指针类型默认在比较的时候是直接比较指针的值,也就是地址的大小,要实现比较权值,有两种方法. 一.另外定义一个结构体PNode,结构体中只有一个成员变量: node* p;然…
题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号最小的城市 输入数据保证正确,每次添加与删除的城市一定是与首都相连的 题解:每次都只需要知道最远且编号最小的城市,所以直接使用优先队列存储 如果是+V就使用并查集(不能路径压缩)添加上然后加入优先队列,接着直接弹出首元素就是结果 如果是-V则把V指向0,接着弹出优先队列的第一个元素 如果他与1相连就…