题解 | #To Fill or Not to Fill#

To Fill or Not to Fill

https://www.nowcoder.com/practice/f7eba38f7cd24c45982831e0f38518f9

区间贪心算法,后一个区间的起点较前一区间偏移多少,区间终点也会偏移多少,所以不用考虑油箱容积的变化。另外浮点数需使用double,float不能通过测试。

#include <iostream>
#include <algorithm>
using namespace std;
struct station {
    double price;
    int distance;
};
bool compare(station a, station b) {
    return a.price <= b.price;
}
int main() {
    int cmax, d, davg, n;
    while (cin >> cmax >> d >> davg >> n) { // 注意 while 处理多个 case
        // cout << a + b << endl;
        station stationList[n];
        for (int i = 0; i < n; i++) {
            cin >> stationList[i].price >> stationList[i].distance;
        }
        sort(stationList, stationList + n, compare);
        bool way[d + 1];
        for (int i = 0; i < d + 1; i++) way[i] = false;
        int farest = cmax * davg;
        double price = 0;
//从油价最低的加油站开始,尽肯能多的去规划里程
        for (auto station : stationList) {
            int distance = 0;
            for (int j = station.distance + 1; j <= d &&
                    j <= station.distance + farest; j++) {
                if (way[j] == false) {
                    way[j] = true;
                    distance++;
                }  
            }
            price += distance / (davg * 1.0)* station.price;
        }
        bool finish = true;
        double allDistance = 0;
        for (int i = 1; i < d+ 1; i++) {
            if (way[i] == false) {
                finish = false;
                break;
            } else allDistance++;
        }
        if (finish == true) printf("%.2f\n", price);
        else printf("The maximum travel distance = %.2f\n", allDistance);
    }
}
// 64 位输出请用 printf("%lld")// 64 位输出请用 printf("%lld")

全部评论

相关推荐

头像
昨天 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务