题解 | #To Fill or Not to Fill#

To Fill or Not to Fill

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

贪心:目标是花费最少,就从“油价”开始“贪”。

将加油站按油价升序排列,依次遍历,

让油价低的加油站出发走尽可能多的路,即走Cmax*Davg,走过的路在路程数组上标记一下,

若从一个加油站出发到最大距离之间有部分已经被走过,则去掉,剩下这段路按该加油站油价收费。

最后若路程数组还有未标记的路段,即没走完,说明不可达。


#include<bits/stdc++.h>
using namespace std;
int main(){
    int Cmax = 0, D = 0, Davg = 0, N = 0;
    double Pi = 0.00;
    int Di = 0;
    multimap<double, int> stations;//加油站:油价 距离
    double res = 0.00;
    while(cin >> Cmax >> D >> Davg >> N){
        stations.clear();
        for(int i = 0; i < N; i++){
            cin >> Pi >> Di;
            stations.emplace(Pi, Di);
        }
        bool* way = new bool[D];//路程数组
        for(int i = 0; i < D; i++)
            way[i] = false;
        /*
        贪心:目标是花费最少,就从“油价”开始“贪”。
        将加油站按油价升序排列,依次遍历,
        让油价低的加油站出发走尽可能多的路,即走Cmax*Davg,走过的路在路程数组上标记一下,
        若从一个加油站出发到最大距离之间有部分已经被走过,则去掉,剩下这段路按该加油站油价收费。
        最后若路程数组还有未标记的路段,即没走完,说明不可达。
        */
        res = 0.00;
        //map默认按油价排序
        for(auto iter = stations.begin(); iter != stations.end(); iter++){
            int dis = 0;//该油站的油所行路程
            for(int i = iter->second; i < iter->second+Cmax*Davg && i < D; i++){
                if(way[i] == false){//未被走过
                    dis++;
                    way[i] = true;
                }
            }
            res += dis * iter->first / Davg;
        }
        //检查路是否走完
        bool finish = true;
        for(int i = 0; i < D; i++)
            if(way[i] == false){//不可达
                cout << "The maximum travel distance = " << i << ".00" << endl;
                finish = false;
                break;
            }
        
//         if(finish)printf("%.2lf\n", res);
        cout.setf(ios::fixed);
        if(finish)cout << setprecision(2) << res << endl;
        
        delete[] way;
    }
    return 0;
}

全部评论

相关推荐

10-09 17:17
已编辑
门头沟学院 Java
活泼的代码渣渣在泡池...:同学你好,我也是学院本,后天要面这个亚信科技,是实习,请问问题都啥样呀,我项目就做了网上的,这是第一次面试
投递多益网络等公司10个岗位
点赞 评论 收藏
分享
野猪不是猪🐗:😇:恭喜你以出色的表现成为xxx的一员 😨:您以进入本公司人才库 实际点开:您愿望单中的xxx正在特卖!
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务