HDU 1896 Stones (Priority_queue)
2015-09-17 14:36
507 查看
【题目链接】:click here~~
【题目大意】:
就是说在一条直线道路上有n个石头,往前走,遇到一个数一个,如果遇到的是第奇数个那就把这个石头往前扔距离dis[i], 如果是第偶数个,就放置不管。
问人走到最后一个石头的位置距原地多远(遇到的最后一个石头距离出发点的位置是多少)。
【思路】模拟即可,遇到第奇数个石头,就将其加上dis[i],放回到优先队列(priority_queue)中,然后再去掉一个石头
代码:
【题目大意】:
就是说在一条直线道路上有n个石头,往前走,遇到一个数一个,如果遇到的是第奇数个那就把这个石头往前扔距离dis[i], 如果是第偶数个,就放置不管。
问人走到最后一个石头的位置距原地多远(遇到的最后一个石头距离出发点的位置是多少)。
【思路】模拟即可,遇到第奇数个石头,就将其加上dis[i],放回到优先队列(priority_queue)中,然后再去掉一个石头
代码:
/* * Problem: HDU No.1896 * Running time: 280MS * Complier: G++ * Author: javaherongwei * Create Time: 14:00 2015/9/17 星期四 */ #include <queue> #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; struct node { int codr; int dis; bool operator <(const node t)const //小的优先级大 { if(t.codr!=codr) return codr>t.codr; return dis>t.dis; } }ST; priority_queue<node> que; int main() { int t;scanf("%d",&t); while(t--) { int n;scanf("%d",&n); while(!que.empty()) que.pop(); for(int i=1; i<=n; ++i) { scanf("%d %d",&ST.codr,&ST.dis); que.push(ST); } int ll=1; while(!que.empty()) { ST=que.top();que.pop(); if(ll&1) //将奇数的石头求和距离,每次求和完重新扔进队列中 { ST.codr+=ST.dis; que.push(ST); } ll++; } printf("%d\n",ST.codr); } return 0; }
相关文章推荐
- 利用marquee对html页面文本滚动
- UITextField长度限制
- 细说iOS中的颜色UIColor、CGColor、CIColor
- UIView的frame和bounds区别
- UIView的frame和bounds区别
- UItextField常用方法
- UItextField常用方法
- Easyui Datebox设置可选时间范围
- ZOJ 3892 Available Computation Sequence 区间dp
- This Android SDK requires Android Developer Toolkit version 22.6.2 or above.
- UICollectionView简单的重排功能
- google 博客huilink
- fuelux-tree API 实例
- 使用cloudera-quickstart-vm无配置快速部署Hadoop应用
- iOS开发 - 创建自定义的UITextField
- java execute、executeQuery和executeUpdate之间的区别
- ORA-12514 TNS:listener does not currently know of service requested in connect descriptor
- NSdata 与 NSString,Byte数组,UIImage 的相互转换
- sublime自己写build System
- UIScrollView