PAT 1033. To Fill or Not to Fill (25)

来源:互联网 发布:山姆店 知乎 编辑:程序博客网 时间:2024/05/21 01:20

基本思想:

         (1) 对加油站按照价格进行排序;

         (2)对于每个加油站,判断应该加入的油量(即能够跑的距离进行计算),与现有路程里的进行合并运算。参考Road结构体的建立方式。


可能有case无法通过的情况:
(1) 没有注意到printf有自动四舍五入的功能;
(2) 当无法跑完全程的时候,注意此题是计算最远跑的距离,不是计算能够跑的距离,所以应该从开始往下搜索直到无法抵达某一位置结束。

//1033. To Fill or Not to Fill (25)////基本思想://(1) 对加油站按照价格进行排序;//(2)对于每个加油站,判断应该加入的油量(即能够跑的距离进行计算),与现有路程里的进行合并运算。//参考Road结构体的建立方式。//可能有case无法通过的情况://(1) 没有注意到printf有自动四舍五入的功能;//(2) 当无法跑完全程的时候,注意此题是计算最远跑的距离,不是计算能够跑的距离,所以应该从开始往下搜索直到无法抵达某一位置结束。//#include<iostream>#include <vector>#include <functional>#include <algorithm>using namespace std;typedef struct Station{float price;float Di;}Station;typedef struct Road{float s;float e;float p;}Road;bool cmp(Station s1, Station s2){//return (s1.Di < s2.Di);return (s1.price < s2.price);}bool cmp2(Road r1, Road r2){return (r1.s < r2.s);}int main(void){#ifdef ONLINE_JUDGE#elsefreopen("D:\\1.txt", "r", stdin);#endiffloat Cmax, D, Davg, N;scanf("%f %f %f %f", &Cmax, &D, &Davg, &N);vector<Station> sta;Station tmp;int i;for (i = 0;i<N;i++){scanf("%f %f", &tmp.price, &tmp.Di);sta.push_back(tmp);}sort(sta.begin(), sta.end(), cmp);int MaxDis = Cmax * Davg;vector<Road> road;for (i = 0;i<sta.size();i++){Road tmp;tmp.s = sta[i].Di;tmp.e = min(sta[i].Di + MaxDis, D);tmp.p = sta[i].price;for (int j = 0;j<road.size();j++){if (tmp.s < road[j].s && tmp.e <= road[j].e && tmp.e >= road[j].s){tmp.e = road[j].s;}else if(tmp.s <= road[j].e && tmp.s >= road[j].s && tmp.e > road[j].e){tmp.s = road[j].e;}else if(tmp.s >= road[j].s  && tmp.e <= road[j].e){tmp.s = tmp.e;}}if (tmp.s >= tmp.e){continue;}road.push_back(tmp);}float AllDis = 0;float TotalPrice = 0;for (i = 0;i<road.size();i++){AllDis += (road[i].e - road[i].s);TotalPrice += (road[i].e - road[i].s) * road[i].p;}if (AllDis != D){sort(road.begin(), road.end(), cmp2);float startPos = 0;float endPos = 0;for (i = 0;i<road.size();i++){if (road[i].s == endPos){endPos = road[i].e;}elsebreak;}printf("The maximum travel distance = %.2f", endPos);}else{printf("%.2f", TotalPrice/Davg);}return 0;}


0 0
原创粉丝点击