CometOJ C0259 [USACO]混合牛奶(1 ms)

本文详细解析了 USACO 比赛中的 C0259 题目——混合牛奶。算法思路是将牛奶信息排序,优先选择价格低且数量多的牛奶。代码实现过程中需特别注意当购买牛奶数量 n=0 时可能出现的 Runtime Error,通过判断 i 的值来修正结果。最后给出了 AC 代码,运行时间为 1 ms。

一、题目描述

二、算法分析说明
将所有农民的牛奶价格和牛奶数量放入一个对或做成结构体,然后快排,先按价格从低到高排序,价格相同则按拥有牛奶的数量从高到低排序。从排最前的开始选,买完该农民的全部牛奶之后就买下一农民的牛奶,一直到数量不少于 n 。
这份代码会模拟:在已购买牛奶的数量 t 达到 n 之前一律买下已访问到的农民的全部牛奶。循环跳出以后,再将多余的牛奶数量减回去。但是有一组数据是 n = 0 。当 n > 0 时,访问到的农民的编号 i 会先继续 +1 才结束循环,所以扣除多算的牛奶数量时要先 --i 才能正确扣除多出的牛奶的相应价格。如果 n = 0 ,这里会出现 Runtime Error 。所以要补充判断
if (i != 0)
本代码中 t 代表已经购入的牛奶的总数量。

三、AC 代码(1 ms)

#include<cstdio>
#include<map>
#include<algorithm>
#pragma warning(disable:4996)
using namespace std;
pair<unsigned, unsigned> p[5000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值