Codeforces 864C - Bus 思維 and 貪心

解:

我們每次判斷從 0 or a處可不可以 完成本次旅程。

1、判斷能不能到達 加油站位置

2、如果不是最後一次,判斷需不需要加油,若下一次到不了加油站那麼就加油

3.否則判斷可不可以不加油直接到達終點or 加油之後能不能到達終點

#include<bits/stdc++.h>
using namespace std;
int a,B,f,k;
signed main(){
    #ifdef swt
        freopen("input2.txt","r",stdin);
    #endif // swt
    #define en '\n'
    cin>>a>>B>>f>>k;
    bool yes=1;
    int b=B,res=0;
    for(int i=1;i<=k;i++){
        if(i&1){
            if(f>b){cout<<-1<<en;return 0;}
            b-=f;
            if(i==k){
                if(b>=a-f)break;
                else{
                    res+=1;b=B;
                }
                if(b>=a-f)break;
                else{
                    cout<<-1<<en;return 0;
                }
                continue;
            }
            if(b-2*(a-f)<0){
            res+=1;b=B;}
            b-=a-f;
        }
        else{
            if(a-f>b){cout<<-1<<en;return 0;}
            b-=a-f;
            if(i==k){
                if(b>=f)break;
                else{
                    res+=1;b=B;
                }
                if(b>=f)break;
                else{
                    cout<<-1<<en;
                return 0;
                }
                continue;
            }
            if(b-2*f<0){
            res+=1;b=B;}
            b-=f;
        }
    }
    cout<<res<<en;
}

有一輛巴士沿着x座標軸移動,從x=0處一直到x=a處。它從x=0處出發,當它抵達x=a處時,它會立即掉頭然後重新回到x=0處。當它抵達x=0處時,它又會立即掉頭前往x=a處……因此,巴士在x=0和x=a之間來回。我們把一輛巴士從x=0到x=a或從x=a到x=0稱作爲一次巴士旅途。一輛巴士一共必須執行k次巴士旅途。

巴士的油箱能夠承載b升的汽油,巴士每移動一個單位將會消耗1升的汽油。巴士出發時的油箱是加滿的。

在x=f處,有一個加油站。當然,這個點是在x=0到x=a之間。巴士的路線上不會再有其他加油站了。不管從哪個方向來,每當經過加油站時,巴士可以選擇停下來然後把油箱加滿。因此,在停下加滿油後,這輛巴士的油箱會裝滿b升汽油。

問:這個巴士最少需要在x=f處加幾次油才能完成它的k次巴士旅途呢?巴士的第一次旅途是從x=0開始的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章