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;
}