zoukankan      html  css  js  c++  java
  • 【CJOJ2482】【POI2000】促销活动

    题面

    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

    题解

    这几道题目用来STL练手
    是STL的好题
    因为每一次都要维护最大值和最小值,并且存在重复的数字。
    这就是multiset的妙用

    关于multiset的基本使用自行百度

    multiset内部的数据存储的时候已经是有序的,可以使用迭代器直接遍历一个multiset,并且与set不同,multiset会保留容器内的重复元素。

    直接上代码了:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<map>
    #include<set>
    using namespace std;
    
    int n,k,a;
    multiset<int> Bill;
    
    int main()
    {
    	cin>>n;
    	long long ans=0;
    	for(int i=1;i<=n;++i)
    	{
    		cin>>k;
    		for(int j=1;j<=k;++j)
    		{
    			cin>>a;
    			Bill.insert(a);
    		}
    		multiset<int>::iterator t1,t2;
    		t1=Bill.begin();
    		t2=Bill.end();
    		t2--;
    		ans+=*t2-*t1;
    		Bill.erase(t1);
    		Bill.erase(t2);
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    Block深入浅出
    JSPatch 遇上swift
    iPhone左下角app图标
    Handoff使用指南
    实习任务——导出excel
    实习任务——对查询结果进行筛选过滤
    Markdown基本语法
    学习笔记(二)——类加载及执行顺序
    #学习笔记(一)——static
    写给过去的3年,拥抱2016
  • 原文地址:https://www.cnblogs.com/cjyyb/p/7197164.html
Copyright © 2011-2022 走看看