堆
。十二。
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【51 Nod】3241 小明和他的同学们【堆】
解题思路一开始想过贪心,用 t/吃一个的时间,算出每个人能吃多少个整的,然后发现不行,因为当一个同学拿下一块时,不知道是否还有剩余,要知道谁先拿也很麻烦。所以考虑——暴力吧!直接用一个优先队列模拟同学吃巧克力的过程,把一个pairpairpair丢到小根堆中,第一关键字为吃完这一个所到的时间,第二关键字为小朋友编号,每次取出栈顶toptoptop,若top.first<=t,m−−top.first<=t,m--top.first<=t,m−−,然后把(top.x+a[top....原创 2022-01-19 16:41:58 · 613 阅读 · 0 评论 -
【一本通 1373】鱼塘钓鱼(fishing)【堆】
解题思路我们枚举最后一个,也就是最右边的鱼塘,则花费的时间就是从第一个鱼塘到这个鱼塘的时间总和,(因为走回头路显然是没意义的)。每次算出以i为最后一个鱼塘还剩的时间,然后把他前面的鱼塘都放进大根堆,每次取出栈顶,也就是能钓到最多鱼的那个,时间减111,一直到时间=0=0=0.PS:每次要清空堆代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#incl..原创 2022-01-19 16:29:57 · 2264 阅读 · 0 评论 -
【51 Nod 2636】卡车加油【堆】
解题思路枚举距离i,若距离i处有加油站,就把油量加入大根堆。现在需要i个单位的油,判断p(当前有的油量)是否>i,不是就不断弹出栈顶,加入经过的加油站能补充的油量。不够就直接输出-1代码#include<bits/stdc++.h>using namespace std;int n,l,p,ans,v[1000010];struct c{ int x,y;}a[10010];priority_queue<int>q;int main(){ ..原创 2022-01-18 20:40:31 · 348 阅读 · 0 评论 -
【一本通 1372】小明的账单【堆】
解题思路分别用大根堆和小根堆储存账单,弹出过的标记下来,然后在弹出队头时判断是否已被弹出。代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<vector>#include<algorithm>#include<queue>#define ll long longusing namespace s..原创 2022-01-18 20:34:26 · 876 阅读 · 0 评论 -
【一本通 1371】看病【堆】
解题思路用STLSTLSTL自带的大根堆存下每个人的优先级,姓名,这里存入pairpairpair就行,第一关键字为优先级。pop时就弹出队头代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<vector>#include<algorithm>#include<queue>#define ll...原创 2022-01-18 20:28:02 · 819 阅读 · 1 评论 -
【洛谷 P7095】不离【二分】【堆优化】
解题思路因为要求“满足性质的最小值”,所以先二分出最小的初始力量值的答案,再去算最小初始精神值。(题目说先保证初始力量值最小)算最小的初始力量值:考虑将力量值排序,每次处理出当前时刻可以穿的然后全都一股脑穿上,再继续重复直到穿不上某件装备(即不合法)或者穿完所有装备(合法)算最小的初始精神值:若当前可以穿的装备不止一件,按a排序穿出的结果显然不是最优的,也许当前可以穿的装备有两件x,yx,yx,y,其中ax<aya_x<a_yax<ay 但bx>byb_x>b_...原创 2021-10-06 18:32:09 · 130 阅读 · 0 评论 -
【洛谷 P1168】中位数【堆】
解题思路对顶堆经典的题目。建一个大根堆一个小根堆,保证小根堆的堆顶大于大根堆的堆顶,则小根堆中的所有数都大于大根堆中的,然后保证大根堆中个数不小于小根堆中的,这样,大根堆的堆顶就是我们要求的中位数。代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip>#include<cstring>#include<cmath>#inc..原创 2021-08-09 10:29:17 · 240 阅读 · 0 评论 -
【洛谷 P2085】最小函数值【堆】
解题思路所以我们建一个大根堆,存最小的数到第m小的数,第m小的数就理所当然的是堆顶了。 每次我们只需要比较新加进来的数比堆顶大还是比堆顶小。如果比堆顶小,将原来的堆顶丢掉,将新的数塞进去; 如若比堆顶大,根据该题题意,a>0&&b>0,函数对称轴x=−b2∗ax=-\frac{b}{2*a}x=−2∗ab/恒小于0,可以得出,y在x>0x>0x>0时是单调递增的,所以接下来的函数值y只会大不会小,可以直接breakbreakbreak掉了由于我们存储..原创 2021-08-09 07:56:17 · 493 阅读 · 2 评论 -
【Ybtoj 第13章例4】工作安排【二叉堆】
解题思路我们将所有工作按截至日期升序排列,依次枚举,用一个变量tottottot记录现在花费的时间(每个工作花费时间为1),然后把所得利润放进堆中,tot++tot++tot++,答案加上所得利润,如果tot比当前工作截止日期大,就把堆顶踢出来(堆顶的利润最小),答案减去所得利润,。代码#include<iostream>#include<cstdio>#include<iomanip>#include<cstring>#inclu...原创 2021-04-08 16:27:13 · 147 阅读 · 0 评论 -
【Ybtoj 第13章例3】龙珠游戏【二叉堆】
解题思路因为题目要求字典序最大的方案,所以前面的数要尽量大,我们这里以每次取出的两个颗龙珠前者为准(应为他排在前面呀)。我们利用堆快速找出最大的编号及其位置(如果该位置标记为找过就重找),并用单向链表维护位置i之后最靠前的未被找出的龙标位置,并将这两个打上找过的标记。代码#include<iostream>#include<cstdio>#include<iomanip>#include<cstring>#include<al...原创 2021-04-07 21:16:53 · 238 阅读 · 0 评论 -
【Ybtoj 第13章例2】序列合并【二叉堆】
解题思路观察题目,A,BA,BA,B数组都已近按从小到大的顺序排序,我们可以轻松得出一个结论:A[i]+B[j]<=A[i]+B[j+1]A[i]+B[j]<=A[i]+B[j+1]A[i]+B[j]<=A[i]+B[j+1],然后根据这个结论我们可以把那些和看成形成了n个有序队列:A[1]+b[1]=A[1]+B[2]……<=A[1]+B[N]A[1]+b[1]=A[1]+B[2]……<=A[1]+B[N]A[1]+b[1]=A[1]+B[2]……<=A...原创 2021-04-07 17:29:12 · 207 阅读 · 0 评论 -
【Ybtoj 第13章例1】合并果子【二叉堆】
知识点:关于堆PS:还记得上周,我跟ajajaj说我们没有完整学过堆,只是之前打过类似题目,然后ajajaj大吃一惊,在机房问其他人,结果我震惊了,旁边的巨爷都说学过了,所以真的就我没打过堆(手打堆)吗???然后对面的cyzcyzcyz十分扎心地补了一句:“哦,那应该就。。(我)没有学吧”。。。然后aj就肯定的认为我之前没有来上课。。。我???结果:我气的跳过了前面的章节,直接来学堆了。。当然,我还是很懒不想总结,所以现在就到了安利博客的时间了:关于堆1+关于堆2上面的博客,思路较清楚,...原创 2021-04-07 17:20:04 · 166 阅读 · 0 评论 -
【2020.10.14 模拟赛 普及组】Problem 4. 小 X 的 AK 计划
解题思路当我们走到第i个机房时,如果它可以做,就做(贪心)。如果它不能做,我们把它前面选择的机房都看一看,如果有几个机房,它的编号为j1,j2……,找到最大的tjtjtj,把tjtjtj换成tititi。PS:可以用堆来放选择的机房。(第一次发现堆这么好用,大爱C++)代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algor..原创 2020-10-17 08:12:43 · 178 阅读 · 0 评论
分享