x轴上0-a长,f点上有一个加油站,b为车的油库,现在车要走k次,从0到n或者从n到0为一次。求最少加油次数。
POINT:
贪心,每次看一看这次要不要加油,如果不加油跑不到下一个加油站,就加,不然就不加。当然最后第k次稍微不同一点,
我把来回都拉成一条线了。代码可能比较抽象。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include<algorithm>
using namespace std;
#define LL long long
int cnt[222];
int main()
{
int a,b,f,k;
scanf("%d %d %d %d",&a,&b,&f,&k);
int now=1;
int you=b;
int flag=1;
int cnt=0;
if(b<f||b<(a-f)) flag=0;
if(k>=2&&b<2*(a-f)) flag=0;
if(k>=3&&b<2*f) flag=0;
if(!flag){
printf("-1\n");
return 0;
}
int aim=a-f;
while(now!=k+1){
you-=a-aim;
if(now==k){
if(you<aim){
cnt++;
}
break;
}
else{
if(you>=2*aim){
you=you-aim;
now++;
}
else{
you=b-aim;
cnt++;
now++;
}
aim=a-aim;
}
}
printf("%d\n",cnt);
}