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;

}

 

 

 

你可能感兴趣的:(HDU)