hdoj1896 Stones (priority_queue)

来源:互联网 发布:扎古2.0知乎 编辑:程序博客网 时间:2024/04/30 18:38

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1896

Sample Input
221 52 421 56 6
 

Sample Output
1112
题意:

有T个case,n个石头,每个石头有一对性质(a,b),a石头现在的位置,b为石头可以从当前位置被抛出的距离,当小伙伴遇到第奇数个石头时就将其向前抛出(也就是还会再遇到),当遇到第偶数个石头时就继续前走不抛出,当有两个石头在同一个位置时,先抛出b值小的石头。问最终最远的石头的位置。

#include<stdio.h>#include<queue>#include<iostream>using namespace std;struct node{    int a,b;    friend bool operator <(node A,node B)    {        if(A.a!=B.a)return A.a>B.a;        return A.b>B.b;    }}dis ;int main(){   int t,n,k,ans;    priority_queue<node > stone;    scanf("%d",&t);    while(t--)    {        k=1;ans=0;        scanf("%d",&n);        while(n--)        {            scanf("%d%d",&dis.a,&dis.b);            stone.push(dis);        }        while(!stone.empty())        {            dis=stone.top();            if(dis.a>ans)ans=dis.a;            stone.pop();            if(k)            {                dis.a=dis.a+dis.b;                stone.push(dis);                k=0;            }            else k=1;        }        printf("%d\n",ans);    }    return 0;}

原创粉丝点击