hdu1896

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

题意:Sempr在走路时,如果遇到为奇数的石头,就把它往前扔,遇到为偶数的石头则不处理,要是同一位置有多个石头,则先扔最重的石头(也就是扔的最近的那个石头),要你求扔的石头离初始位置的最大距离。

#include<iostream>
#include<queue>
using namespace std;
struct ss
{
    friend operator<(const ss a,const ss b)
    {
        if(a.p>b.p)
            return 1;
        else
            if(a.p==b.p&&a.q>b.q)
                return 1;
            else
                return 0;
    }
    int p,q;
};
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        priority_queue<ss>Q;
        int n,i;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            ss k;
            scanf("%d%d",&k.p,&k.q);
            Q.push(k);
        }
        int m=0,sum=0;
        ss tmp;
        while(!Q.empty())
        {
            m++;
            if(m%2)
            {
                tmp.p=Q.top().p+Q.top().q;
                tmp.q=Q.top().q;
                Q.pop();
                Q.push(tmp);
            }
            else
            {
                sum=Q.top().p;
                Q.pop();
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

 

 

 

posted @ 2012-12-02 16:16  紫忆  阅读(419)  评论(0编辑  收藏  举报