本文主要是介绍HDU 1896 Stones (Priority_queue),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【题目链接】:click here~~
【题目大意】:
就是说在一条直线道路上有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;
}
这篇关于HDU 1896 Stones (Priority_queue)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!