5461. 【NOIP2017提高A组冲刺11.8】购物 
(File IO): input:shopping.in output:shopping.out

Time Limits: 1000 ms  Memory Limits: 524288 KB  Detailed Limits  

Goto ProblemSet

Description

X 城的商场中,有着琳琅满目的各种商品。一日,小X 带着小Y 前来购物,小Y 一共看中了n件商品,每一件商品价格为Pi。小X 现在手中共有m个单位的现金,以及k 张优惠券。小X 可以在购买某件商品时,使用至多一张优惠券,若如此做,该商品的价格会下降至Qi。
小X 希望尽可能多地满足小Y 的愿望,所以小X 想要知道他至多能购买多少件商品。
 

Input

第一行包含三个整数n,k,m,表示商品总数,小X 拥有的优惠券与现金总数。
接下来n行每行包含两个整数Pi,Qi。

Output

共一行包含一个整数,表示小X 至多能购买的物品数。
 

Sample Input

4 1 7
3 2
2 2
8 1
4 3

Sample Output

3
样例解释:一种最优的购买方式是购买1,2,3号物品,并用优惠券购买物品3,总共花费为3+2+1=6。
 
 
做法:对Qi 和 Pi 排序, 先最小的K个Qi,然后将这K个Pi - Qi放进一个小根堆,每次比较Pi 和 Qi + 小根堆堆顶的值,更新答案和小根堆。一种具有撤销操作的贪心。
 
代码如下:

 #include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
#define LL long long
#define N 50007
using namespace std;
LL n, m, k, p[N], tot;
struct arr
{
LL pi, qi;
}q[N];
priority_queue < LL, vector<LL>, greater<LL> > Q; LL cmp(arr x, arr y)
{
return x.qi < y.qi;
} int main()
{
freopen("shopping.in", "r", stdin);
freopen("shopping.out", "w", stdout);
scanf("%lld%lld%lld", &n, &k, &m);
for (int i = ; i <= n; i++)
scanf("%lld%lld", &q[i].pi, &q[i].qi);
sort(q + , q + n + , cmp);
LL ans = , site = ;
for (int i = ; i <= k; i++)
{
if (m - q[i].qi >= )
{
m -= q[i].qi;
ans++;
Q.push(q[i].pi - q[i].qi);
site = i;
}
else break;
}
if (site < k)
{
printf("%lld", ans);
return ;
}
for (int i = site + ; i <= n; i++)
p[i - site] = q[i].pi;
tot = n - site;
sort(p + , p + n - site + );
LL j = ;
site++;
while (m >= && (j <= tot || site <= n))
{
LL now = Q.top();
LL mi = min(p[j], q[site].qi + now);
if (m - mi >= )
{
if (mi == p[j])
{
m -= p[j];
j++;
ans++;
if (j > tot) p[j] = 0x7f7f7f7f;
if (ans == n) break;
}
else
{
m -= q[site].qi + now;
ans++;
Q.pop();
Q.push(q[site].pi - q[site].qi);
site++;
}
}
else break;
}
printf("%lld", ans);
}

JZOJ 5461. 【NOIP2017提高A组冲刺11.8】购物的更多相关文章

  1. [JZOJ 5465] [NOIP2017提高A组冲刺11.9] 道路重建 解题报告 (e-dcc+树的直径)

    题目链接: http://172.16.0.132/senior/#main/show/5465 题目: 小X所居住的X国共有n个城市,有m条无向道路将其连接.作为一个统一的国家,X 城的任意两个城市 ...

  2. JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章

    5462. [NOIP2017提高A组冲刺11.8]好文章 (File IO): input:article.in output:article.out Time Limits: 1000 ms  M ...

  3. JZOJ 5456. 【NOIP2017提高A组冲刺11.6】奇怪的队列

    5456. [NOIP2017提高A组冲刺11.6]奇怪的队列 (File IO): input:queue.in output:queue.out Time Limits: 1000 ms  Mem ...

  4. JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室

    5459. [NOIP2017提高A组冲刺11.7]密室 (File IO): input:room.in output:room.out Time Limits: 1000 ms  Memory L ...

  5. JZOJ 5455. 【NOIP2017提高A组冲刺11.6】拆网线

    455. [NOIP2017提高A组冲刺11.6]拆网线 (File IO): input:tree.in output:tree.out Time Limits: 1000 ms  Memory L ...

  6. 5458. 【NOIP2017提高A组冲刺11.7】质数

    5458. [NOIP2017提高A组冲刺11.7]质数 (File IO): input:prime.in output:prime.out Time Limits: 1000 ms  Memory ...

  7. [JZOJ5455]【NOIP2017提高A组冲刺11.6】拆网线

    Description 企鹅国的网吧们之间由网线互相连接,形成一棵树的结构.现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料.但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把 ...

  8. 【NOIP2017提高A组冲刺11.8】好文章

    #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> us ...

  9. 【NOIP2017提高A组冲刺11.6】拆网线

    和syq大兄弟吐槽题目不小心yy出了正解.. 最优的选法就是选两个两个相互独立的,欸这不就是最大匹配吗?那多的企鹅就新加一条边呗?不够的就除以2上取整呗? 欸?AC了? 树也是一个二分图,最大匹配=最 ...

随机推荐

  1. Java文件与io——File类

    概念: File类:表示文件和目录路径名的抽象表示形式. File类可以实现文件的创建.删除.重命名.得到路径.创建时间等等,是唯一与文件本身有关的操作类. 例: public class FileD ...

  2. (转)认识 Linux 文件系统

    7.1 认识 Linux 文件系统 原文:https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/59.html Linux 最传统 ...

  3. (转)Linux修改eth2到eth0(70-persistent-net.rules)

    之前在公司提供的虚拟机器上面,一直有个问题用着很不舒服,为什么它的IP选择的设备的eth2的,但是我在/etc/sysconfig/network-scrpts/下面也没有找到ifcfg-eth2的配 ...

  4. JAVA 集合类小结

    一 集合和数组 因为本人也是个go的爱好者,所以对于集合类算是摸的比较透的. 说到集合,必须了解数组和集合. Java的数组长度固定,集合长度不定.集合是特定的数据结构的集合. 而go里面并没有集合, ...

  5. C#字符串自增自减算法

    本文URL:http://www.cnblogs.com/CUIT-DX037/p/6770535.html 实现字符串自增和自减运算: 1.数字从 0-9 变化: 2.字母从 A-Z.a-z 变化: ...

  6. iOS开发ReactiveCocoa学习笔记(三)

    RAC常用用法: 1.监听按钮的点击事件: UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame ...

  7. 移植MAVLINK到STM32详细教程之三

    在前面教程的基础上继续移植优化,之前的没有加缓冲区,没有接收函数功能,这里进行统一的讲解                            作者:恒久力行  qq:624668529 缓冲区对于接 ...

  8. webpack源码之ast简介

    什么是AST 树是一种重要的数据结构,由根结点和若干颗子树构成的. 根据结构的不同又可以划分为二叉树,trie树,红黑树等等.今天研究的对象是AST,抽象语法树,它以树状的形式表现编程语言的语法结构, ...

  9. NIO(一)缓冲区

    I/O的基本概念 同步和异步的概念: 所谓的同步就是在发出一个请求的时候,如果没有得到结果,就不返回.即调用者主动等待返回结果. 所谓的异步:调用之后直接返回结果,一般通过回调函数来处理这个应用. 阻 ...

  10. 05、Win7上openSSH的安装与配置

    05.Win7上openSSH的安装与配置 1.概述 linux上的ssh命令在网络通信场景下非常方便.现在windows也支持ssh方式和远程主机进行访问.如果只是使用ssh简单的访问功能,就需要很 ...