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;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974046.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!