题意:一辆车从0点出发,开向a点,或者从a开向0,称为一次journey,在f点有个加油站能加满油(油箱容量为b),问最少加几次油能进行k次journey。若不能,输出-1。
备注:最开始起点为零。
分析:当b小于f或者b小于a-f时,显然一次journey都不能进行。
首先模拟车开到f点,若此时还剩一次journey,只需判断剩下的油够不够开到a点,否则判断剩下的油够不够开到下一次到达f点,若加满油都开不到下一个f点,输出-1。另一点同理。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int a,b,f,k;
cin>>a>>b>>f>>k;
if(f>b) cout<<"-1"<<endl;
else{
int gas=b-f;
int sum=0;
for(int i=1;i<=k;i++){
if(i%2==1){
int need;
if(i==k) need=a-f;
else need=2*(a-f);
if(need>b){
cout<<"-1"<<endl;
return 0;
}
if(need>gas){
gas=b;
sum++;
}
gas-=need;
}
else{
int need;
if(i==k) need=f;
else need=2*f;
if(need>b){
cout<<-1<<endl;
return 0;
}
if(need>gas){
gas=b;
sum++;
}
gas-=need;
}
}
cout<<sum<<endl;
}
return 0;
}

本文探讨了一辆汽车完成指定次数旅程所需的最少加油次数问题。旅程在0点与a点间往返进行,途中可在f点加油,油箱容量为b。通过模拟算法确定是否可行及所需加油次数。
995

被折叠的 条评论
为什么被折叠?



