题目描述:

题目理解:

  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=1;while(i){if(i%2==1)//如果遇到的石头为第奇数颗,扔出去,并将该石子存入队列
            {z=q.top();q.pop();z.d+=z.w;q.push(z);if(q.size()==1)//如果队列中只还剩下1个元素,取出来后退出。
                {printf("%d\n",q.top().d);break;}}else//如果遇到的石头为第偶数颗,不理它
            {q.pop();}i++;}}return 0;}

转载于:https://www.cnblogs.com/LJHAHA/p/10012776.html

贪心+优先队列之更改优先级-hdu1896相关推荐

  1. LA 4254 Processor 处理器 【二分 贪心 优先队列】

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21663 二分: 最大值最小的问题通过二分来求解.对处理器速度进行 ...

  2. HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解

    思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...

  3. 1163 最高的奖励(贪心+优先队列)

    有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该任务,就可以获得对应的奖励.完成每一个任务所需的时间都是1个单位时间.有时候完成所有任务是不可能的,因为时间上可能会有冲突 ...

  4. 贪心+优先队列 HDOJ 5360 Hiking

    题目传送门 1 /* 2 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 3 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小, ...

  5. 贪心(优先队列) - New Year Snowmen - CodeForces - 140C

    贪心(优先队列) - New Year Snowmen - CodeForces - 140C 题意: 给定一个长度为n的正整数序列a1,a2,...,an.给定一个长度为n的正整数序列a_1,a_2 ...

  6. CodeForces 140C New Year Snowmen (贪心+优先队列)

    题意:n个数,选三个严格下降的数为一组,求最多能选多少组,并列出每组哪些数. 题解:贪心+优先队列 最多能选多少组,那么必须贪心数量多的. 例如:1 1 2 3 4 5 如果按照数的大小排序,只能贪到 ...

  7. CF140C New Year Snowmen(贪心+优先队列)

    CF140C 贪心+优先队列 贪心策略:每次取出数量最多的三种球,合成一个答案,再把雪球数都-1再插回去,只要还剩下三种雪球就可以不断地合成 雪球数用优先队列维护 #include <bits/ ...

  8. 【BHOJ 女娲加农炮 |、||】贪心 | 优先队列 | 堆 | E

    这次我们通过两道例题来总结一下优先队列的用法和实现: 目录: [BHOJ 1512]女娲加农炮 [BHOJ 1517]女娲加农炮II [BHOJ 1512]女娲加农炮 核心:贪心 + 优先队列 URL ...

  9. 设计软件调节CPU使用率及更改优先级

    一.设计师有时需要同时打开不同的设计软件,但有些设计软件占用资源很高,像3Dmax渲染时会占用所有CPU资源基本做不了其它操作,用以下方法就可以调节CPU使用率. 1.以7800x6核12线程操作3D ...

最新文章

  1. 结合Apache和Tomcat实现集群和负载均衡
  2. 联合权值 NOIP2014 提高组 Day1 T2
  3. Java反斜线(\)路径与转义字符的小坑
  4. 从无到有到完善 - Teams抽奖机器人开发历程
  5. php scandir sftp,CentOS 下使用SFTP实现网站自动生成FTP账号,实现Chroot功能
  6. d06调试详细说明_PIC系列单片机配置字详细介绍(长期实践总结的压箱底资料)
  7. 求向量的垂线_高考数学填空题如何快速求直线关于直线对称的直线方程
  8. 什么是AJAX (转贴)
  9. c语言word类型的题库,可下载c语言上机题库word版
  10. fmd单片机c语言教程,ft62f08x_c语言 FMD单片机C语言列子程序 - 下载 - 搜珍网
  11. java dcm4che findscu实现workList通讯——客户端SCU
  12. iweboffice之word——常用属性的设置
  13. UE4 粒子特效基础学习 (03-制作上升光线特效)
  14. 使用windows内存-内存映射文件
  15. 日本房产泡沫的崩塌,虽然很长,希望80后仔细阅读
  16. iPad goodnotes 5 打开很慢“准备自己的资料库,获得更快体验”解决
  17. 什么是固态硬盘及其优缺点【转】
  18. 什么是CF , correlation filer ? 【无标题】
  19. ogm session_Hibernate OGM:降低进入NoSQL的障碍
  20. VAPS XT航空仪表开发第一节

热门文章

  1. 腾讯云对象存储 python_腾讯云对象存储(COS)服务的 API
  2. pcb二次钻孔_作为一名合格的PCB设计工程师,了解生产制造很重要
  3. javascript 时间类型 Date
  4. redis 缓存数据格式
  5. sqlalchemy like
  6. flask-sqlAlchemy 创建表
  7. 如何导出源文件_正骨室001期 | 如何避免色彩损失
  8. 基于KVM、Xen、OpenVZ等虚拟化技术的WEB在线管理工具
  9. windows + Linux 自定义模板配置 怎么使用自定义规范管理器
  10. Java基础学习总结(145)——Java SPI(Service Provider Interface)简介