题意:
现在一个巴士在两个地点(0和a)往返,从起点到对面或者从对面回来都叫做一次旅程,这个巴士初始有b升油,没前进一个单位就消耗一个单位的油,现在两点之间只有一个加油站位于f,巴士可以在加油站直接加满油,现在要k次旅程,问最少加几次油
思路:
贪心就好了,不过在最后一次旅程的时候要特判一下
错误及反思:
1 WA。因为有段代码是复制粘贴,结果后面要改代码,却只改了一处代码,还稀里糊涂的过了样例。。。
代码:
#include<bits/stdc++.h>
using namespace std;
int a,b,f,k;
int main(){
scanf("%d%d%d%d",&a,&b,&f,&k);
int ans=0,now=b;
bool sit=true,judge=true;
for(int i=0;i<k;i++){
if(i==k-1){
if(sit){
now-=f;
if(now<0)
judge=false;
if(now<a-f){
now=b;
ans++;
}
now-=a-f;
if(now<0)
judge=false;
sit=false;
}
else{
now-=a-f;
if(now<0)
judge=false;
if(now<f){
now=b;
ans++;
}
now-=f;
if(now<0)
judge=false;
sit=true;
}
}
else{
if(sit){
now-=f;
if(now<0)
judge=false;
if(now<2*(a-f)){
now=b;
ans++;
}
now-=a-f;
if(now<0)
judge=false;
sit=false;
}
else{
now-=a-f;
if(now<0)
judge=false;
if(now<2*f){
now=b;
ans++;
}
now-=f;
if(now<0)
judge=false;
sit=true;
}
}
}
if(judge)
printf("%d\n",ans);
else
printf("-1\n");
}