POJ 2051 argus(简单题,堆排序or优先队列)
又是一道数据结构题,使用堆来进行权值调整和排序,每次调整都是o(n)的复杂度,非常高效。
第一眼看题觉得可以用优先队列来做,应该也很简单。
事实上多数优先队列都是通过堆来实现的。
写的时候还是出了一些问题:
1、二叉树根节点下标显然不能为0;
2、限界之后若出现扩界要小心;
3、在迭代循环比较的时候,尤其注意到底比较的是谁,别把自己绕晕了。
ac代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
//纠错方法:带简单样例进去跑,打印错误位置
//二叉树注意编号从1开始
//限界之后扩界敏感
struct node{
int now,no,period;
};
const int maxn=;
node n[maxn];
void down(int p,int len){
int q=p*;
node a=n[p];
while(q<len){
//这里出现死循环,因为我的二叉树是从0开始编号的,而很明显 0*2^n=0; 有点智障的bug
if(q+<len){//这句不能少(限界之后扩界需要再判定越界)
if(n[q].now>n[q+].now){
q++;
}
else if(n[q].now==n[q+].now&&n[q].no>n[q+].no){
q++;
}
} //if(n[q].now>n[p].now){//比较对象到底是谁 !
if(n[q].now>a.now){
break;
}
else if(n[q].now==a.now&&a.no<n[q].no){//是a在比较
break;
} n[p]=n[q];
p=q,q=*p;
}
n[p]=a;
}
void makeMinheap(int len){
for(int j=(len-)/;j>=;j--){
//cout<<j<<endl;
down(j,len);
}
} int main(void){
string s;
cin>>s;
int i=;
while(s[]!='#'){
cin>>n[i].no>>n[i].period;
n[i].now=n[i].period;
i++;
cin>>s;
}
int len=i;
int l;
cin>>l;
makeMinheap(len);
while(l--){
cout<<n[].no<<endl;
n[].now+=n[].period;
down(,len);
}
return ;
}
POJ 2051 argus(简单题,堆排序or优先队列)的更多相关文章
- poj 2051 Argus(优先队列)
题目链接: http://poj.org/problem?id=2051 思路分析: 优先级问题,使用优先队列求解:当执行某个任务后,再增加一个任务到队列中, 该任务的优先级为执行任务的时间加上其时间 ...
- poj 2051.Argus 解题报告
题目链接:http://poj.org/problem?id=2051 题目意思:题目有点难理解,所以结合这幅图来说吧---- 有一个叫Argus的系统,该系统支持一个 Register 命令,输入就 ...
- POJ 2051 Argus
Argus Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8782 Accepted: 3985 Description ...
- POJ 2393 贪心 简单题
有一家生产酸奶的公司,连续n周,每周需要出货numi的单位,已经知道每一周生产单位酸奶的价格ci,并且,酸奶可以提前生产,但是存储费用是一周一单位s费用,问最少的花费. 对于要出货的酸奶,要不这一周生 ...
- 算法手记 之 数据结构(堆)(POJ 2051)
一篇读书笔记 书籍简评:<ACM/ICPC 算法训练教程>这本书是余立功主编的,代码来自南京理工大学ACM集训队代码库,所以小编看过之后发现确实很实用,适合集训的时候刷题啊~~,当时是听了 ...
- poj 3253:Fence Repair(堆排序应用)
Fence Repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 23913 Accepted: 7595 Des ...
- POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]
题目链接:http://poj.org/problem?id=3635 Description After going through the receipts from your car trip ...
- 【ZZ】堆和堆的应用:堆排序和优先队列
堆和堆的应用:堆排序和优先队列 https://mp.weixin.qq.com/s/dM8IHEN95IvzQaUKH5zVXw 堆和堆的应用:堆排序和优先队列 2018-02-27 算法与数据结构 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
随机推荐
- glibc-2.23_int_malloc_流程浅析
- [已解决]ubuntu下chrome和firefox输入框内无法快捷键全选
问题现象: 在chrome或firefox浏览器(其他地方没试)的输入框中使用ctr + a进行全选失效,在google中找到了这个已经解决的http://askubuntu.com/question ...
- ui-router 视图嵌套时指定二级视图显示默认页面
当跳转到user页面时,右边的uiview是为空的,要点击了左侧的导航才能插入模板,如何在路由中设置二级视图的默认显示页面呢? app.config(function($stateProvider, ...
- 移动支付--银联,支付宝,微信(android)
在这个移动互联网快速发展的时代,手机已经成为人们生活或者出行之中必不可少的设备了,如今非常多城市的商户都能够採用支付宝,微信支付了.人们出门仅仅须要随身携带带手机.不用带大量现金就能够放心购物了.如今 ...
- java7(2)——使用mutilcatch注意事项
从java7推出mutilcatch后,到现在都少有看到人使用,可能是这个功能真正用起来,比起多个catch并不快多少,而且现在的工IDE具太厉害了,什么都有快捷键!说是这么说,我们还是得了解一下如何 ...
- Spark的集群管理器
上篇文章谈到Driver节点和Executor节点,但是如果想要运行Driver节点和Executor节点,就不能不说spark的集群管理器.spark的集群管理器大致有三种,一种是自带的standa ...
- oracle的相关信息
[INS-08109] :https://blog.csdn.net/u012830807/article/details/17302919[INS-13001]:https://blog.csdn. ...
- Struts2 iterator标签实现嵌套循环
问题:有一个List<List<Object>> list用struts2在页面显示使用<s:iterator value=”list” var=”list1″> ...
- PAT 1038 Recover the Smallest Number[dp][难]
1038 Recover the Smallest Number (30 分) Given a collection of number segments, you are supposed to r ...
- docker——安装
Docker划分为CE和EE.CE即社区版(免费,支持后期三个月),EE即企业版,强调安全,付费使用. #安装依赖包 yum install -y yum-utils device-mapper-pe ...