题意:
现在一个巴士在两个地点(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");
}

本文介绍了一个关于巴士在两地往返并进行加油策略的算法问题。核心在于通过贪心算法确定巴士在给定条件下完成指定次数旅程所需的最少加油次数。特别讨论了最后一次旅程的特殊情况,并附带了C++实现代码。
815

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



