题意:sempr走在路上会遇见一些石头,如果遇见第奇数个石子,则将它扔到前面,如果是偶数,则什么也不做,如果某一个位置上有多个石头,则先遇见扔的比较近的那个,现在给出一些石头的初始位置和能够扔的距离,问到最后最远处的石头离初始位置多远!
#include "stack"
#include "cstdio"
#include "iostream"
#include "cmath"
#include "set"
#include "sstream"
#include "cctype"
#include "string"
#include "cstring"
#include "algorithm"
#include "queue"
#include "map"
using namespace std;
#define LL long long
#define inf 0x7ffffff
#define pa pair<int,int>
#define pi 3.1415926535897932384626433832795028841971
const int M=55;
struct node
{
int p;
int d;
bool operator<(const node t) const
{
if(p!=t.p)
return p>t.p;
else
return d>t.d;
}
};
int main()
{
int t,n,i,k;
node temp;
priority_queue<node> que;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
while(!que.empty())
que.pop();
for(i=0;i<n;i++)
{
scanf("%d%d",&temp.p,&temp.d);
que.push(temp);
}
k=1;
while(!que.empty())
{
temp=que.top();
que.pop();
if(k&1)
{
temp.p+=temp.d;
que.push(temp);
}
k++;
}
printf("%d\n",temp.p);
}
return 0;
}