POJ-2431 Expedition WA点总结

题目大意:

你有一辆卡车,从初始位置出发,油箱里目前有油量P,汽车每走1的距离就要耗费1点油量,沿途有加油站可以加油(前提是你车的油量能保证开过去);

 

要求输入:

第一行:N(表示沿途加油站的数量)

后N行:A B(输入两个数A、B,A是距离终点的位置!!!这算是一个坑点---是距离终点的位置,不是距离起始位置的距离,B是这个加油站能加的油量)

最后一行:L P(L路程总长度,P是初始油量)

 

我碰到的WA点:

1.一个是输入的问题

2.为了到达一个加油站可能在此之前多次加油(优先队列多次弹出)见数据2

3.没有设置终止条件(即如果车子到不了终点,应设置结束条件)

 

 

提供的易WA数据:

/*
<1>poj网站提供的
6
4 4
5 2
11 5
15 10
13 22
6 3
25 10
结果应为2

<2>
3
8 8
18 4
21 3
25 10
结果应为3

<3>
10
24 2
23 2
22 2
21 2
20 2
19 2
18 2
17 2
16 2
14 15
25 10
结果应为2

<4>
1
1 3
25 10
结果应为-1
*/

 

 

 

 

AC代码(优先队列+贪心):

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>

using namespace std;

struct node {
    int l;
    int oil;
};

int N,L,P;

priority_queue<int>q;

node n[maxn];

bool cmp(node n1,node n2){
    return n1.l<n2.l;
}

int main(){

    cin>>N;
    for(int i=0;i<N;i++){
        cin>>n[i].l>>n[i].oil;
    }
    cin>>L>>P;
    for(int i=0;i<N;i++){
        n[i].l=L-n[i].l;
    }
    sort(n,n+N,cmp);
    int pos=0;
    int ans=0;


    n[N].l=L;n[N].oil=0;
    int i=0;
    while(pos+P<L){
        if(pos+P<n[i].l){
            if(q.empty())break;//无法到达终点的终止条件
            while(!q.empty()){  //沿途可能多次加油
                int oil=q.top();
                q.pop();
                P+=oil;
                ans++;

                if(pos+P>=n[i].l){
                    q.push(n[i].oil);
                    P=P-(n[i].l-pos);
                    pos=n[i].l;
                    break;
                }
            }
        }
        else {
            q.push(n[i].oil);
            P=P-(n[i].l-pos);
            pos=n[i].l;
        }
        i++;
    }
    if(pos+P>=L)cout<<ans<<endl;
    else cout<<-1<<endl;
    return 0;
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水能zai舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值