解:
我們每次判斷從 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開始的。