【杭电】[1896]Stones

这里写图片描述
这里写图片描述

像这种题都是理解题目难
真理清思路之后写的时候可能很简单就AC了……

这个利用优先队列做比较方便

题目大意是
遇见第奇数次石子就向前扔di米
遇见第偶数次石子就忽略
这样一直进行直到遇不见石子
问最远的石子距离出发点有多远
(总是从1出发)

这里是一个不断把石子加入队列的过程
直到队列为空(前方没有石子)
运用优先队列可以方便的按照
优先Pi再看Di的方式来取石子

#include<stdio.h>
#include<queue>
using namespace std;
struct node {
    int p,d;
    bool friend operator<(node A,node B) {
        if(A.p==B.p)
            return A.d>B.d;
        else
            return A.p>B.p;
    }
} a;
int main() {
    int T;
    scanf("%d",&T);
    while(T--) {
        priority_queue<node>q;
        int n;
        scanf("%d",&n);
        while(n--) {
            scanf("%d %d",&a.p,&a.d);
            q.push(a);
        }
        int time=0,flag=0;
        while(!q.empty()) {
            time++;
            if(time&1) {
                a=q.top();
                a.p+=a.d;
                if(a.p>flag)
                    flag=a.p;
                q.push(a);
                q.pop();
            } else {
                a=q.top();
                if(a.p>flag)
                    flag=a.p;
                q.pop();
            }
        }
        printf("%d
",flag);
    }
    return 0;
}

题目地址:【杭电】[1896]Stones

原文地址:https://www.cnblogs.com/BoilTask/p/12569679.html