Gym 100231D Balloons 贪心
题意很好理解,一场acm比赛里,有两个房间A和B为通过题目的队伍供应气球,而赛场上不同的队伍距离A和B两房间的距离并不一样,且A和B房间都各有有限个气球。给出每个队伍需要的气球总数和初始时两房间各自拥有的气球 总数,请你安排分配方式,使运送气球的总路程最短(只计算单程)
先排序,再根据排好的顺序一个队一个队安排
排序比较有技巧,考虑到:A和B两房间是等地位的,对队伍排序时若将队伍到这两个房间的距离作为第一,第二关键字来排,会有不公平的情况,可能更倾向于A房间或B
因此,我们记一个队伍到A的距离为da,到B的距离为db,我们以da-db为关键字做升序排序,这样的好处是,排好序的序列里,越靠前的相对距离A越近,越靠后的相对距离B越近,注意我们要强调“相对”。
这样,我们从排好序的队列头开始分配,对于某一个队,如果A房间离他近且A的剩余气球足够这个队伍拿,那么A供给这个队所有需要的气球,若不够,从B拿。
若这个队离B更近,那么我们应该检查B房间剩下的气球能否充足供应给剩下的队伍,因为越往后的队伍,B分配给他就越有利(为此我们要维护一个变量leftballons来实时更新尚未分配的队伍所需的气球总数)
如果B房间的气球充足,那么在保证后续分配的前提下把多余的气球分配给当前队伍,如果无法满足当前队的需要,这个队的缺口由A房间补全,
code:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
