【杭电】[1896]Stones

来源:互联网 发布:正规网络博客平台 编辑:程序博客网 时间:2024/06/05 20:29

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

像这种题都是理解题目难
真理清思路之后写的时候可能很简单就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\n",flag);    }    return 0;}

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

0 0
原创粉丝点击