超市market(堆维护,小根堆+大根堆)

该博客介绍了如何模拟超市举行的活动,每天从堆中取出金额最大和最小的账单计算奖金,并求出整个活动期间的奖金总额。使用了小根堆和大根堆来维护账单金额,通过读入数据进行操作并输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

超市
(market.pas/c/cpp)
【题目描述】
超市正在举行一个活动,该活动的规则如下:
想要参与的顾客会将他购物的账单放入纸箱中,账单上写有顾客的联系方式和购物的金额。每天超市关门前纸箱中金额最大、最小的两张帐单被取出,付款金额最大的顾客将获得一笔奖金,价值为取出的两张帐单的金额之差;为了不重复计算,取出的两张帐单不再放回箱子,而剩下的帐单仍保留在箱中,进行第二天的活动。
顾客很多,因此可假定:每天活动结束时,箱中至少有两张帐单以供取出。
小h也参加了这次活动,他想知道整个活动期间超市付出的奖金总额是多少?
【输入数据】
第一行是一个整数n,表示活动历时的天数。
以下的n行,每行包含若干由空格分隔的非负整数。第i+1行的数表示在第i天投入箱子的账单金额。每行的第一个数是一个整数k,表示当日账单的数目。后面的k个正整数代表这k笔账单的金额。
【输出数据】
输出一个数,表示活动期间超市付出的奖金总额。
【样例输入】
5
3 1 2 3
2 1 1
4 10 5 5 1
0
1 2
【样例输出】
19
【数据范围】
设s为整个活动中涉及到的账单笔数。
30%的数据满足n≤100,s≤10000。
70%的数据满足s≤10^5。
100%的数据满足1≤n≤5000,0≤k≤10^5,s≤10^6,每笔账单的金额不超过10^6。

program df;
var i,j,n,m,x,y,z,k,t,len,ls:longint;
s:int64;
a,b,c,d,f:array[0..1000000] of longint;
procedure put1(x:longint);
var i,j,dd:longint;
begin
inc(len);
a[len]:=x;
i:=len;
while (i>1) and (a[i div 2]>a[i]) do
begin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值