时间限制:3.000秒
每天往箱子里放一定数量的小票,这一天结束后从箱子里取出金额最大和最小的两张小票,然后金额最大的小票对应的顾客将会获得价值两者金额之差的礼品,问n天之后一共发出去多少价值的礼品。
因为要排序而且要两头取,所以这里用到了STL里面的可重集multiset。做出来2.412秒,看有的大神只花了0.362秒,真心不知道怎么做的……
#include
#include
using std::multiset;
multiset
box;
int main() {
int n, k;
long long m, sum;
while(~scanf("%d", &n) && n) {
box.clear(); sum = 0;
for(int i = 0; i != n; ++i) {
scanf("%d", &k);
for(int i = 0; i != k; ++i) {
scanf("%lld", &m);
box.insert(m);
}
auto s = box.begin(), e = box.end(); --e;
sum += *e - *s;
box.erase(e); box.erase(box.begin());
}
printf("%lld\n", sum);
}
}