问题描述

小 C 今天出去购物,商店里总共有 n 种商品,小 C 的钱够买至多 k 个商品。

小 C 对每种商品都有一个喜爱程度,但如果买了同一种商品很多次,小 C 对这种商品的喜爱程度就会降低。

具体地说,如果小 C 买了 x 个第 i 种商品,每个第 i 种商品都会让他增加 max(ai−xbi,0)的喜悦值。请你求出小 C 最多能增加多少喜悦值。

输入格式

第一行两个正整数 n, k。

接下来 n 行,每行两个正整数 ai , bi。

输出格式

输出一个整数,表示答案。

样例输入

2 4

50 2

40 1

样例输出

171

数据范围

对于 50%的数据,n,k ≤1000 。

对于 100%的数据,n, k, ai ≤10 5 ,bi ≤1000。

解析

设第\(k\)次购买第\(i\)件商品,那么新购得的商品增加的开心值为\(a[i]-k*b[i]\),而前面的商品本来可以增加\((k-1)*[a[i]-(k-1)*b[i]]\)的开心值,由于又买了一次,一共减少了\((k-1)*b[i]\)的值,所以,这件商品的贡献为\(a[i]-(2k-1)*b[i]\)。由贪心的思想,用堆维护每次的最大值,每弹出一个值就将对应的商品的新的贡献放进堆中。

代码

#include <iostream>
#include <cstdio>
#include <queue>
#define N 100002
#define int long long
using namespace std;
struct con{
int a,b,id,cost;
bool operator < (const con &x) const{
return cost<x.cost;
}
}c[N];
int n,k,i,cnt[N];
priority_queue<con> q;
int read()
{
char c=getchar();
int w=0;
while(c<'0'||c>'9') c=getchar();
while(c<='9'&&c>='0'){
w=w*10+c-'0';
c=getchar();
}
return w;
}
signed main()
{
freopen("buy.in","r",stdin);
freopen("buy.out","w",stdout);
n=read();k=read();
for(i=1;i<=n;i++){
c[i].a=read();c[i].b=read();
c[i].id=i;cnt[i]++;
c[i].cost=c[i].a-c[i].b;
q.push(c[i]);
}
int ans=0;
for(i=1;i<=k;i++){
con tmp=q.top();
q.pop();
ans+=tmp.cost;
cnt[tmp.id]++;
tmp.cost=tmp.a-(2*cnt[tmp.id]-1)*tmp.b;
if(tmp.cost<0) tmp.cost=0;
q.push(tmp);
}
cout<<ans<<endl;
fclose(stdin);
fclose(stdout);
return 0;
}

P.S. 注意long long......

Test 6.24 T1 购物的更多相关文章

  1. [2018湖南省队集训] 6.24 T1 marshland

    题面在这里! 一开始感觉像一个类似二分图的最小割,于是成功跑偏2333333 很容易发现一个关键性质,'L'的两个角落在的偶数格 的行(或者列)的奇偶性一定不同.... 于是我们再把偶数格按照行(或者 ...

  2. mysql统计前24小时数据没有补0

    SELECT t1. HOUR HOUR, COUNT(t2. HOUR) count FROM ( SELECT DATE_FORMAT( HOUR), '%y-%m-%d %H' ) HOUR F ...

  3. java多线程系类:基础篇:04synchronized关键字

    概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...

  4. SYN Cookie的原理和实现

          本文主要内容:SYN Cookie的原理,以及它的内核实现. 内核版本:3.6 SYN Flood 下面这段介绍引用自[1]. SYN Flood是一种非常危险而常见的Dos攻击方式.到目 ...

  5. 史上最全APP推广渠道

    群主做App推广的过程中,有过失败也尝过成功的甜头,渐渐地在APP推广尤其是渠道推广中积累了一些实战经验想同大家分享.如果各位有更好的推广建议,欢迎沟通分享哦!   一.应用商店推广   1.应用市场 ...

  6. [总结] NOIP 前的考试记录

    sb博主又犯sb错误了! 他觉得以往模拟赛因为犯sb错误扔的分足足有1k分了! 于是他想记录一下自己犯的sb错误看看自己到底有多sb! 嗯就从今天开始吧 2018.9.28 1. 二分边界写错.骚什么 ...

  7. 开源虚拟化KVM(二)管理虚拟存储

    五,管理虚拟存储 5.1 虚拟磁盘概述 5.1.1 虚拟化项目中存储的注意事项 [x] 存储的性能几乎总是虚拟化的瓶颈 [x] 通过多个硬盘驱动以分布磁盘I/O来实现存储解决方案 [x] 考虑部署集中 ...

  8. MT【180】齐次化+换元

    已知实数$a,b$满足$a^2-ab-2b^2=1,$则$a^2+b^2$的取值范围_____ 解答:$\textbf{方法一}$由已知得$(a-2b)(a+b)=1$,设$x=a-2b,y=a+b$ ...

  9. java多线程_01_线程的基本概念

    线程:一个程序里边不同的执行路径 例子程序:这个例子程序是一条执行路径.这个程序只有一个分支,就是main方法,叫主线程 public static void main(String[] args) ...

随机推荐

  1. TC39 - 新特性

    tc39/proposal-hashbang: #! for JS 某些奇怪的报错可能是因为系统不支持 Shebangs / Hashbang 导致的. 貌似 Node.js 已经支持这个新特性了,使 ...

  2. python 定时器,轮询定时器

    首先想要实现的效果是:每隔1段时间,就去调用1个接口确认结果,直到接口返回的结果为true,停止调用 所以这里会用到python的定时器 先来了解最简单的定时器: python 定时器默认定时器只执行 ...

  3. history历史记录在AJAX下出现异常跳转 [解决]

    事情是这样的,在一个历史记录指针应该在[1, 2, 3, 4]的[3]位置的情况下,出现了历史记录指针指向了[4]的情况,而且是在正常后退事件发生之后,(据我所知)没有代码操作的情况发生的. 这是一个 ...

  4. Delphi XE2 之 FireMonkey 入门(5) - TAlphaColor

    不是 TColor, 是 TAlphaColor 了. TAlphaColor = type Cardinal; 还是一个整数. 四个字节分别是: AA RR GG BB(透明度.红.绿.蓝); 这和 ...

  5. 07 oracle 非归档模式 inactive/active/current redo log损坏的恢复

    在非归档模式下缺失Redo Log后的恢复 将之前的归档模式修改为非归档 SQL> shutdown immediate; SQL> startup mount SQL> alter ...

  6. Azylee.Utils 工具组

    https://github.com/yuzhengyang/Fork Fork 是平时做 C# 软件的时候,整合各种轮子的一个工具项目,包括并不仅限于:各种常用数据处理方法,文件读写 加密 搜索,系 ...

  7. Python json函数与Flask jsonify函数

    JSON数据结构 要把json与字典区分开来 dumps(字典转换成Json) loads(Json转换成字典) 参考: Python 的字典是一种数据结构,JSON 是一种数据格式. json 就是 ...

  8. lesson2-完全图、补图和顶点度

    (一).完全图.偶图与补图 1.每两个不同的顶点之间都有一条边相连的简单图称为完全图 (complete graph).在同构意义下,n个顶点的完全图只有一个,记为 2.所谓具有二分类(X, Y)的偶 ...

  9. JavaBean简介和要求

    JavaBean是一种Java语言写成的可重用组件. 所谓javaBean,是指符合如下标准的Java类: 类是公共的 有一个无参的公共的构造器 有属性,且有对应的get.set方法 用户可以使用Ja ...

  10. UVA-10462.Is There A Second Way Left(Kruskal+次小生成树)

    题目链接 本题大意:这道题用Kruskal较为容易 参考代码: #include <cstdio> #include <cstring> #include <vector ...