1033. To Fill or Not to Fill (25)

#include <iostream>
#include <algorithm>

using namespace std;

struct node
{
	double dis, p;
}stations[510];

int cmp(node n1, node n2)
{
	return n1.dis < n2.dis;
}

int main()
{
	double cmax, d, davg;
	int n;
	scanf("%lf%lf%lf%d", &cmax, &d, &davg, &n);

	int i;
	for(i = 1; i <= n; i++)
	{
		scanf("%lf%lf", &stations[i].p, &stations[i].dis);
	}

	sort(stations + 1, stations + n + 1, cmp);

	double max = 0, flag = 1, cha, tankmaxrun = cmax * davg;
	if(stations[1].dis > 0)
	{
		flag = 0;
	}
	else
	{
		for(i = 1; i <= n - 1; i++)
		{
			cha = stations[i + 1].dis - stations[i].dis - tankmaxrun;
			if(cha > 0)
			{
				max = stations[i].dis + tankmaxrun;
				flag = 0;

				break;
			}
		}

		if(flag == 1)
		{
			cha = d - stations[n].dis - tankmaxrun;
			if(cha > 0)
			{
				max = stations[n].dis + tankmaxrun;
				flag = 0;
			}
		}
	}

	if(flag == 0)
	{
		printf("The maximum travel distance = %.2lf\n", max);
		return 0;
	}

	double cost = 0, tank = 0, need, curp;
	int j, index;

	for(i = 1; i <= n - 1; i++)
	{
		cha = stations[i + 1].dis - stations[i].dis - tank * davg;
		curp = stations[i].p;

		if(cha > 0)
		{
			need = cha / davg;
			cost += need * curp;
			tank += need;
		}

		if(tank < cmax)
		{
			max = stations[i].dis + tankmaxrun;
			index = -1;

			for(j = i + 1; j <= n && stations[j].dis <= max; j++)
			{
				if(stations[j].p <= curp)
				{
					index = j;
					break;
				}
			}

			need = 0;
			if(index == -1)
			{
				if(max >= d)
				{
					cha = d - stations[i].dis - tank * davg;
					need = cha / davg;
				}
				else
				{
					need = cmax - tank;
				}
			}
			else
			{
				cha = stations[index].dis - stations[i].dis - tank * davg;
				if(cha > 0)
				{
					need = cha / davg;
				}
			}

			cost += need * curp;
			tank += need;
		}

		cha = stations[i + 1].dis - stations[i].dis;
		tank -= cha / davg;
	}

	cha = d - stations[n].dis - tank * davg;
	cost += cha / davg * stations[n].p;

	printf("%.2lf\n", cost);

	system("pause");
	return 0;
}

 

posted on 2025-11-23 17:02  王景迁  阅读(0)  评论(0)    收藏  举报

导航