文章

8

粉丝

216

获赞

18

访问

63.6k

头像
借鉴题解里的大佬的代码;自己加了一些注释方便读懂;留备复习用
P1347 浙江大学机试题
发布于2021年5月20日 15:27
阅读数 8.2k

#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;
		//无法...
登录查看完整内容


登录后发布评论

1 条评论
yanchi
2023年2月23日 18:00

我自己测试了一个例子

30 40 1 4
1 0
2 10
3 20
4 30

这个最便宜的价格应该是30+20=50,但是答案输出的是30+40=70,原因算法里面少了一个循环,需要考虑如果当前加油站能达到的更远加油站里是属于最便宜的,那应该把油加到他能达到的最远的加油站。

赞(0)