贪心+优先队列之更改优先级-hdu1896
题目描述:


题目理解:
Sempr从位置0往前走,一路上他会遇到石子,如果这颗石子是他遇到的第奇数颗石子,那么他就把石子往前扔出去,如果他遇到的是第偶数颗石子,他会把它留在原地。需要注意的是,Sempr前面扔出去的石子,会继续作为后续会遇到的石子。如果在一个位置上有多颗石子,那么选出扔的最远的那颗石子扔出去。
比如说第一个测试案例:Sempr在位置1遇到了第一颗石子,他将石子扔到了1+5=6的位置上。Sempr继续往前走,在位置2上遇到第二颗石子,他将其留在原地,并且继续往前走。当Sempr走到位置6时,他遇到了第三颗石子(这颗石子是由位置1的第一颗石子扔到这儿的),他将这颗石子扔到了6+5=11的位置上,并继续往前走。当Sempr走到位置11时,他遇到第四颗石子,他将其留在原地。至此,该测试案例中的石子就扔完了。所以最终的结果为11。
这道题由于运用到了优先队列,并且在同一个位置有多颗石子时需要更改队列的优先级,所以自己去了解了一下关于优先级修改的相关操作。
C/C++对bool operator < (const p &a)const的认识:http://www.cnblogs.com/ECJTUACM-873284962/p/6771262.html
结构体内嵌比较函数:http://www.cnblogs.com/ZERO-/p/9347296.html
代码分析:
#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;
struct stone
{
int d;
int w;
bool operator <(const stone &a)const//operator为C++里面的重载函数;括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改!
{
if(a.d==d)//如果石子的位置与队列中其他石子的位置一样
return a.w<w;//在优先队列中,排序方式与sort函数相反,即默认的排序方式是a.w>w,当前对象的w如果大于其他元素的w(即a.w),那么w的优先级更高
return a.d<d;//否则,位置靠前的优先级高
}
}z;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
priority_queue<stone>q;
int n;
scanf("%d",&n);
while(n--)
{
scanf("%d %d",&z.d,&z.w);
q.push(z);
}
int i=;
while(i)
{
if(i%==)//如果遇到的石头为第奇数颗,扔出去,并将该石子存入队列
{
z=q.top();
q.pop();
z.d+=z.w;
q.push(z);
if(q.size()==)//如果队列中只还剩下1个元素,取出来后退出。
{
printf("%d\n",q.top().d);
break;
}
}
else//如果遇到的石头为第偶数颗,不理它
{
q.pop();
}
i++;
}
}
return ; }
贪心+优先队列之更改优先级-hdu1896的更多相关文章
- hihoCoder 1309:任务分配 贪心 优先队列
#1309 : 任务分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, ...
- UVA 11134 - Fabled Rooks(贪心+优先队列)
We would like to place n rooks, 1 ≤ n ≤ 5000, on a n×n board subject to the following restrict ...
- C. Playlist Educational Codeforces Round 62 (Rated for Div. 2) 贪心+优先队列
C. Playlist time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解
思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...
- 贪心+优先队列 HDOJ 5360 Hiking
题目传送门 /* 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小,该人能 被邀 ...
- [POJ1456]Supermarket(贪心 + 优先队列 || 并查集)
传送门 1.贪心 + 优先队列 按照时间排序从前往后 很简单不多说 ——代码 #include <queue> #include <cstdio> #include <i ...
- Painting The Fence(贪心+优先队列)
Painting The Fence(贪心+优先队列) 题目大意:给 m 种数字,一共 n 个,从前往后填,相同的数字最多 k 个在一起,输出构造方案,没有则输出"-1". 解题思 ...
- CF140C New Year Snowmen(贪心+优先队列)
CF140C 贪心+优先队列 贪心策略:每次取出数量最多的三种球,合成一个答案,再把雪球数都-1再插回去,只要还剩下三种雪球就可以不断地合成 雪球数用优先队列维护 #include <bits/ ...
- NYOJ 1107 最高的奖励(贪心+优先队列)
最高的奖励 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 请问:挖掘机技术哪家强?AC了告诉你! 给你N(N<=3*10^4)个任务,每个任务有一个截止完成时 ...
随机推荐
- iOS UIDatePicker设置为中文的方法
UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 20, 200, 30)]; datePick ...
- restful中的分页
普通分页 普通分页类似于Django中的分页 源码 class PageNumberPagination(BasePagination): """ A simple pa ...
- socket-WebSocket-HttpListener-TcpListener服务端客户端的具体使用案例
/// <summary> /// 启动服务监听的ip和端口的主线程 /// </summary> /// <param name="tunnelPort&qu ...
- elementui上传图片到七牛云服务器
注册七牛云 首先,注册七牛云,并且完成实名认证,完成后会在个人中心->秘钥管理中看到两个秘钥AccessKey/SecretKey 创建存储空间(必须要实名认证) 生成上传凭证 为了实现上传,我 ...
- Json数据交互格式介绍和比较
1.什么是数据交互格式? 就是客户端和服务端进行信息传输的格式(xml和json),双方约定用什么格式进行传输,然后解析得到自己想要的值 xml扩展标记语言,属于重量级(第一占宽带.第二解析难) js ...
- yum安装软件内容
linux yum源改为阿里yum源 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back ...
- Python基础之面向对象的软件开发思路
当我们来到生产环境中的时候,对一个软件需要开发的时候,刚开始也可能会懵逼,挝耳挠腮.不知从何下手,其 实,大家也不要苦恼,这是大多数程序员都会遇到的问题.那么,我们就要想一想了,既然大家都会这样,到低 ...
- bzoj 4715
其实我并没有见过原题,只是因为...这被改编成了互测题... 题目中提到了一个序列,这个序列是很重要的,否则这个问题好像是没有合理的时间复杂度解法的 但正因为有了这个序列,这个问题的时间复杂度才让人能 ...
- jmeter 控制线程组执行顺序
这个要配合全局变量.if和while来实现BeanShell取样器,全局变量:${__setProperty(newswitch,${switch1},)}if条件:"${__P(newsw ...
- 备份还原数据数据库(固定IP版)
1.新建data文件夹,用于存放备份数据 2.新建db文件夹,用于存放初建数据库为脚本 3.首次使用双击export.bat进行备份数据库: 4.以后每次使用双击setup.bat进行还原数据库: 备 ...