其实我只想做通用版三的第一题贪心。。然后就看到了优先队列,然后想起来这道题..
第一次学习C++里的队列
在此感谢http://blog.csdn.net/c20182030/article/details/70757660
这一题目大意为由步数的奇偶性判断是否扔石头,然后计算最远石头到出发点的距离
#include<cstdio>
#include<queue>
using namespace std;
struct node
{
int p;
int d;
bool operator<(const node &a) const
{
if (p==a.p)
return d>a.d;
else return p>a.p;
}
};
int main()
{
int n,t,i;
struct node a;
priority_queue <node> q;
scanf("%d",&t);
while(t--)
{
int step=0,max=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&a.p,&a.d);
q.push(a);
}
while(!q.empty())
{
a=q.top();
q.pop();
step++;
if(step%2!=0)
{
if(a.p+a.d>max) max=a.p+a.d;
a.p+=a.d;
q.push(a);
}
}
printf("%d\n",max);
}
}