You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
978 B
C++
32 lines
978 B
C++
#include <cstdio>
|
|
int n;
|
|
double d[1000], p[1000], c, res, dpl, tmp, cost;
|
|
int main()
|
|
{
|
|
scanf("%lf%lf%lf%lf%d", &tmp, &c, &dpl, &p[0], &n);
|
|
d[n + 1] = tmp, p[n + 1] = 0;
|
|
double maxlength = c*dpl;
|
|
for (int i = 1; i <= n; i++)
|
|
scanf("%lf%lf", d + i, p + i);
|
|
for (int i = 0; i <= n;)
|
|
{
|
|
if (maxlength < d[i + 1] - d[i]) { puts("No Solution"); goto ret; }
|
|
int minid = i;
|
|
for (int j = i + 1; d[i] + maxlength >= d[j] && j <= n + 1 && minid == i; j++)
|
|
if (p[j] < p[i])
|
|
minid = j;
|
|
if (i == minid)
|
|
cost += (c - res)*p[i], res = c - (d[i + 1] - d[i]) / dpl, i++;
|
|
else
|
|
{
|
|
if (res < (d[minid] - d[i]) / dpl)
|
|
cost += ((d[minid] - d[i]) / dpl - res)*p[i], res = 0;
|
|
else
|
|
res -= (d[minid] - d[i]) / dpl;
|
|
i = minid;
|
|
}
|
|
}
|
|
printf("%.2f", cost);
|
|
ret:
|
|
return 0;
|
|
} |