扔石头只扔第奇数个石头肉过两个石头在同一位置就扔远的那个
这也是优先队列的问题先优先排序位置然后排序大小
扔过的石头还有再次入列指导最后没有石头为止
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
#include<cstdio>
#include<queue>
struct node{
int l;
int f;
bool friend operator < (node a,node b){
if(a.l==b.l)
return a.f>b.f;
return a.l>b.l;
}//按照优先排序的方法
}a;
using namespace std;
int main(){
priority_queue<node> cnt;
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
int i=1;
for(i=1;i<=n;i++){
scanf("%d%d",&a.l,&a.f);
cnt.push(a);
}
int sum=0;
i=1;
while(!cnt.empty()){
a=cnt.top();
if(i&1){//判断这是石头是第几个石头
sum=a.l+a.f;
a.l=a.l+a.f;
cnt.pop();
cnt.push(a);
}
else{
cnt.pop();
}
i++;
}
printf("%d\n",sum);
}
}