CJOJ 2482 【POI2000】促销活动

时间:2022-11-12 23:14:36

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】促销活动的更多相关文章

  1. CJOJ 2482 【POI2000】促销活动(STL优先队列,大根堆,小根堆)

    CJOJ 2482 [POI2000]促销活动(STL优先队列,大根堆,小根堆) Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用 ...

  2. 【CJOJ2482】【POI2000】促销活动

    题面 Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用,他个人的详细情况,然后将账单放入一个特殊的投票箱. 当每天促销活动结束时, ...

  3. 【bzoj2947】&lbrack;Poi2000&rsqb;促销

    2947: [Poi2000]促销 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 181  Solved: 120[Submit][Status][D ...

  4. BZOJ&lowbar;2947&lowbar;&lbrack;Poi2000&rsqb;促销&lowbar;堆

    BZOJ_2947_[Poi2000]促销_堆 Description Bytelandish连锁超市委托你编写一个程序来模拟一项即将施行的促销活动,该活动的规则如下: ●想要参与的顾客,只需把他的个 ...

  5. 从电商平台促销活动看电商app开发趋势

    据亿合科技小编了解到:尽管各大电商平台都进入了品质和品牌时代,但对于消费者来说,低价依然是一个有吸引力的因素.尼尔森<网络购物者趋势研究>报告显示,2016年价格敏感型购物者的比例从15% ...

  6. bzoj2947&colon; &lbrack;Poi2000&rsqb;促销

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 178  Solved: 119[Submit][Status][Discuss] Descriptio ...

  7. 面试作业之浅析京东促销活动核心模型 - DDD

    前言 京东作为中国最大的自营式B2C电商平台,提供一站式综合性购物,服务亿万家庭,涵盖3C.家电.消费品.服饰.家居家装.生鲜和新通路(B2B),满足了消费者的多元化需求.每天都会发布相关的促销活动, ...

  8. 亚马逊促销活动Promotion②:Money Off&lpar;满减折扣&rpar;的设置教程

    满减.折扣是放之四海皆有效的促销手段,虽然亚马逊对卖家有诸多限制,但这个促销方式却是允许的,对亚马逊的卖家而言,这对提升商品销量.打造爆款都是极好的.今天小编来讲讲亚马逊的Money Off要怎么设置 ...

  9. vivo全球商城时光机 - 大型促销活动保障利器

    一.背景 官网商城在双11.双12等大促期间运营同学会精心设计许多给到用户福利的促销活动,当促销活动花样越来越多后就会涉及到很多的运营配置工作(如指定活动有效期,指定活动启停状态,指定活动参与商品等等 ...

随机推荐

  1. hdu 1004 Let the Balloon Rise

    Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  2. BUG等级和严重等级关系

  3. 解析txt文本,dom4j工具输出为xml文档

    有如下一个ttl.txt文本文档,每一行用空格隔开的三段分别代表主谓宾, 要将它们输出为xml格式文档 工具:dom4j,jar包导入MyEclipse的Java Project工程 代码如下: pa ...

  4. 温故而知新 clone

    浅复制(浅克隆) 被复制对象所有变量都含有与原来对象的相同值,对象中对其他对象的引用仍然指向原来的对象,换言之,复制对象只复制考虑的对象,而不复制所引用的对象.继承自java.lang.Object类 ...

  5. C&num;并行和多线程编程&lowbar;&lpar;1&rpar;认识Parallel

    Parallel: 英 [ˈpærəlel]    美 [ˈpærəˌlɛl] ,并联的,并行的. 随着多核时代的到来,并行开发越来越展示出它的强大威力!使用并行程序,充分的利用系统资源,提高程序的性 ...

  6. LeetCode &lpar;13&rpar;&colon; 3Sum Closest

    https://leetcode.com/problems/3sum-closest/ [描述] Given an array S of n integers, find three integers ...

  7. NewsServiceImpl

    package com.pb.news.service.impl; import java.util.List; import com.pb.news.dao.NewsDao;import com.p ...

  8. 排序之冒泡排序&lpar;bubblesort&rpar;

    package com.pailian; /* * 冒泡排序 * 比较相邻的俩位数,这样每轮比较都会出现一个最大值或最小值 * 下一轮比较就会减少一次(因为已经知道了一个最大值或最小值) * 注意根据 ...

  9. 读书笔记 C&num;事件event浅析&lpar;一&rpar;

    在C#中,所谓event事件,就是一种特殊的委托.如果要声明事件,首先就要声明一个相对应的委托类型.按照流程来说,事件相当于委托类型往上升了一级似的,我是这样认为的. //1.先声明委托类型 publ ...

  10. java 锁的分类

    java中为了解决多线程并发带来的线程安全问题,引入了锁机制. 一.公平锁和非公平锁 1.公平锁:按照申请锁的顺序(FIFO队列)来获取锁. 2.非公平锁:所有线程都会竞争,获取的锁的顺序和申请顺序无 ...