CJOJ 2482 【POI2000】促销活动(STL优先队列,大根堆,小根堆)
CJOJ 2482 【POI2000】促销活动(STL优先队列,大根堆,小根堆)
Description
促销活动遵守以下规则:
- 一个消费者 —— 想参加促销活动的消费者,在账单下记下他自己所付的费用,他个人的详细情况,然后将账单放入一个特殊的投票箱。
- 当每天促销活动结束时,从投票箱中抽出两张账单:
第一张被抽出的账单是金额最大的账单
然后被抽出的是金额最小的账单,对于付了金额最大账单的这位消费者,将得到一定数目的奖金,其奖金数等于他账单上的金额与选出的最小金额的差。
为了避免一个消费者多次获奖,根据上面所抽出的两张账单都不返回到投票箱,但是剩下的账单还继续参加下一天的促销活动。
超市的售出额是巨大的,这样可以假定,在每天结束,拿出数额最大账单和数额最小账之前,在投票箱内就已经至少存在了 2 张账单。你的任务是去计算每天促销活动投进投票箱的账单数额的基本信息。在整个活动中开销总数。
本题中约定:
整个活动持续了 N 天 (N<=5000) 。 第 i 天放入的帐单有 a[i] 张, a[i]<=10^5 。且 sigma(a[1]...a[n])<=10^6 。 每一天放入的帐单的面值均 <=10^6 。
Input
第一行是一个整数 n ( 1 <= n <= 5000 ),表示促销活动历时的天数。
以下的 n 行,每行包含若干由空格分隔的非负整数。第 i+1 行的数表示在第 i 天投入箱子的账单金额。每行的第一个数是一个整数 k ( 0 <= k <= 10^5 ), 表示当日账单的数目。后面的 k 个正整数代表这 k 笔账单的金额,均小于10^6 。
整个活动中涉及到的账单笔数不会超过 10^6 。
Output
输出唯一一行是一个整数,等于整个促销活动中应该付出的奖金总额。
Sample Input
5
3 1 2 3
2 1 1
4 10 5 5 1
0
1 2
Sample Output
19
Http
CJOJ:http://oj.changjun.com.cn/problem/detail/pid/2482
Source
STL,优先队列
题目大意
一个商场搞促销活动n天,每天选出最高账单和最低账单,求所有最高账单-最低账单的总和。
解决思路
这道题是优先队列的运用。分别维护两个优先队列,一个最小值优先,一个最大值优先,每次弹出队首元素即可。需要注意的是,一个元素是在两个队列中同时存在的,而有可能在这个队列中弹出去了,而在另一个队列中还没有,所以要用一个Cnt数组统计一下每个元素出现的次数,若某次发现队首元素的Cnt已经为0了,则说明已经在另外一个队列中弹出,将重复的去除即可。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxN=5001;
const int inf=2147483647;
int n;
priority_queue<int,vector<int>,less<int> > Q1;//大的优先
priority_queue<int,vector<int>,greater<int> > Q2;//小的优先
int Cnt[1000001]={0};//统计每一种金额的次数
int main()
{
int K;
int value;
int Ans=0;
cin>>n;
for (int i=1;i<=n;i++)
{
scanf("%d",&K);
for (int j=1;j<=K;j++)
{
scanf("%d",&value);
Cnt[value]++;
Q1.push(value);
Q2.push(value);
}
while (Cnt[Q1.top()]==0)//如果这种金额次数已经没有了,说明在另一个优先队列中已经弹出直接去掉即可
Q1.pop();
while (Cnt[Q2.top()]==0)//与上面同理
Q2.pop();
Ans=Ans+Q1.top()-Q2.top();
//cout<<Q1.top()<<" "<<Q2.top()<<endl;
Cnt[Q1.top()]--;
Cnt[Q2.top()]--;
Q1.pop();
Q2.pop();
}
cout<<Ans<<endl;
return 0;
}
CJOJ 2482 【POI2000】促销活动(STL优先队列,大根堆,小根堆)的更多相关文章
- 优先队列实现 大小根堆 解决top k 问题
摘于:http://my.oschina.net/leejun2005/blog/135085 目录:[ - ] 1.认识 PriorityQueue 2.应用:求 Top K 大/小 的元素 3 ...
- 51nod K 汽油补给 大根堆+小根堆....
题目传送门 用优先队列瞎搞... 想着在每个地方 先算上一个点到这一个点要花费多少钱 这个用小根堆算就好 然后在这个地方加油 把油钱比自己多的替代掉 这个用大根堆维护一下 然后两个堆之间信息要保持互通 ...
- bzoj 1577: [Usaco2009 Feb]庙会捷运Fair Shuttle——小根堆+大根堆+贪心
Description 公交车一共经过N(1<=N<=20000)个站点,从站点1一直驶到站点N.K(1<=K<=50000)群奶牛希望搭乘这辆公交车.第i群牛一共有Mi(1& ...
- CJOJ 2482 【POI2000】促销活动
CJOJ 2482 [POI2000]促销活动(STL优先队列,大根堆,小根堆) Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用 ...
- CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆)
CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆) Description 有n个函数,分别为F1,F2,...,Fn.定义 \(Fi(x)=Aix^2+Bix ...
- 【CJOJ2482】【POI2000】促销活动
题面 Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用,他个人的详细情况,然后将账单放入一个特殊的投票箱. 当每天促销活动结束时, ...
- bzoj2947: [Poi2000]促销
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 178 Solved: 119[Submit][Status][Discuss] Descriptio ...
- 【bzoj2947】[Poi2000]促销
2947: [Poi2000]促销 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 181 Solved: 120[Submit][Status][D ...
- BZOJ_2947_[Poi2000]促销_堆
BZOJ_2947_[Poi2000]促销_堆 Description Bytelandish连锁超市委托你编写一个程序来模拟一项即将施行的促销活动,该活动的规则如下: ●想要参与的顾客,只需把他的个 ...
随机推荐
- Kubernetes集群部署篇( 一)
K8S集群部署有几种方式:kubeadm.minikube和二进制包.前两者属于自动部署,简化部署操作,我们这里强烈推荐初学者使用二进制包部署,因为自动部署屏蔽了很多细节,使得对各个模块感知很少,非常 ...
- lambda----jdk8重头戏
简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...
- Vue实现双向绑定的原理以及响应式数据
一.vue中的响应式属性 Vue中的数据实现响应式绑定 1.对象实现响应式: 是在初始化的时候利用definePrototype的定义set和get过滤器,在进行组件模板编译时实现water的监听搜集 ...
- centos6 安装图形化界面
1.首先进行光盘的挂载,注意光盘挂载时不会自动建立目录的,所以需要自己建立目录 mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom #dev目录为设备目录 2.更 ...
- MySql点点滴滴(一)之可视化工具介绍
以下的文章主要介绍的是10个可以简化开发过程的MySQL工具,其中包括MySQL Workbench.phpMyAdmin.Aqua Data Studio,以及SQLyog与MYSQL Front等 ...
- 一致性Hash算法(KetamaHash)的c#实现
Consistent Hashing最大限度地抑制了hash键的重新分布.另外要取得比较好的负载均衡的效果,往往在服务器数量比较少的时候需要增加虚拟节点来保证服务器能均匀的分布在圆环上.因为使用一般的 ...
- Maven解读:强大的依赖体系
Github地址:https://github.com/zwjlpeng/Maven_Detail Maven最大的好处就是能够很方便的管理项目对第三方Jar包的依赖,只需在Pom文件中添加几行配置文 ...
- Android表情开发
Android表情开发 效果图: 源码下载-github:https://github.com/SiberiaDante/EmotionApp (觉得有用的给个星星,支持一下哦)
- PAT 甲级 1141 PAT Ranking of Institutions
https://pintia.cn/problem-sets/994805342720868352/problems/994805344222429184 After each PAT, the PA ...
- selenium使用execl实现数据驱动测试
import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.uti ...