一、题目描述
二、算法分析说明
将所有农民的牛奶价格和牛奶数量放入一个对或做成结构体,然后快排,先按价格从低到高排序,价格相同则按拥有牛奶的数量从高到低排序。从排最前的开始选,买完该农民的全部牛奶之后就买下一农民的牛奶,一直到数量不少于 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,