文章
8
粉丝
216
获赞
20
访问
67.6k
#include<bits/stdc++.h>
using namespace std;
//加油站
struct Station{
double price;//单位油价
double dist;//该加油站距离杭州距离
};
//最后输出打印
struct Print{
int flag;//是否到达
double pri;//若到达此处为how much;若未到达此处为how far has run
};
//按照距离杭州最近的排序
bool cmpD(Station a, Station b){
return a.dist <= b.dist;
}
//cmax邮箱最大油;davg单位油可跑的距离;num加油站数量;D到目的城市的总距离
Print Loop(int cmax, int davg, int num, double D){
Print result;
Station gas[num+1];
//将单位油价格,转为单位距离价格
for(int i=0; i<num; i++){
double unitPri;
cin >> unitPri >> gas[i].dist;
gas[i].price = unitPri / davg;
}
//按距离排序
sort(gas, gas+num, cmpD);
double run_max = cmax * davg * 1.0;//油箱满油最多可跑的距离
double run_fina = 0.0;//共跑了多少距离
double run_left = 0.0;//跑到加油站后还能再跑多少距离
double ival;//两个加油站之间的距离
double pri_fina = 0.0;//最终价格
double pri_now = 9999.0;//现在的加油站的价格;初始设置为一大值,后面都会进行赋值覆盖
gas[num].dist = D;//总距离
for(int i=0; i<num; i++){
ival = gas[i+1].dist - gas[i].dist;
//无法...
登录后发布评论
我自己测试了一个例子
30 40 1 4
1 0
2 10
3 20
4 30
这个最便宜的价格应该是30+20=50,但是答案输出的是30+40=70,原因算法里面少了一个循环,需要考虑如果当前加油站能达到的更远加油站里是属于最便宜的,那应该把油加到他能达到的最远的加油站。