2017上海金马五校 购买装备 贪心+二分Check

购买装备

发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:05   时间限制: 1000ms   内存限制: 128M

最近盛大的一款游戏传奇世界极其火爆。游戏玩家John,想购买游戏中的装备。已知游戏的商店里有n件装备,第i件装备具有属性值ai,购买需要花费bi个金币。John想去购买这些装备,但是账号中只有m个金币,John是个很贪婪的家伙,他想购买尽可能多的装备。并且在保证购买到最多件装备的情况下,他还想让他所购买的装备当中拥有最小属性值的装备属性值尽可能大

输入测试组数T,每组数据第一行输入整数n(1<=n<=100000)和m(1<=m<=109), 接下来有n行,第i行有两个数aibi(1<=ai,bi<=10000).

对于每组数据,输出两个数字,第一个数字代表John最多可以购买的装备数,第二个数代表在John购买最多件装备的前提下,所购买的装备当中拥有最小属性值的装备的最大属性值(输入数据保证至少可以购买一件装备)

1
2 4
3 2
2 3
1 3


题解:

注意最后加粗的一句话“最小属性值的装备的属性值尽可能大”,最大化最小值问题,非常典型的二分Check问题。

这个问题,我们要输出最多能购买的装备的数量,然后再这个基础上再最大化最小值

对于求最多能购买的装备的数量问题,毫无疑问是一个非常简单的贪心问题。

我们先预处理按照价值排个序,然后贪心选取价值最小的装备,得到最多的装备数量记为max_num

然后,我们对属性值进行二分Check,Check函数描述如下(原数组已按照价值作为关键字排序):

对于装备数组,从前往后扫描,对于所有满足条件(价值小于等于剩余钱数   且   属性值大于等于被check值)的装备进行选取

判断所选取的装备数能否达到max_num


AC代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef pair<int,int> pii;
pii ps[100007]; 
int n,m;
bool check(int mid,int min_num){int res = 0;int remain = m;for(int i = 0;i < n;i++){if(remain >= ps[i].first && ps[i].second >= mid){remain -= ps[i].first;res++;}}return res >= min_num;
}
int main(){int T;scanf("%d",&T);while(T--){int INF = 0;int max_num = 0;scanf("%d%d",&n,&m);for(int i = 0;i < n;i++){int a,b;scanf("%d%d",&a,&b);ps[i] = make_pair(b,a);INF = max(INF,b);}sort(ps,ps+n);int remain = m;for(int i = 0;i < n;i++){remain -= ps[i].first;if(remain < 0){max_num = i;break;}}if(!max_num) min_num = n;int l = 0,r = INF + 1;while(r - l > 1){int mid = (l + r) / 2;if(check(mid,min_num)) l = mid;else r = mid;}printf("%d %d\n",max_num,l);}return 0;
}
/*
1
2 4
3 2
2 31
4 4
2 1 
2 2
2 3
2 4
*/




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

31、JAVA_WEB开发基础之servlet(2)

使用servlet需要依赖jar包&#xff1a;servlet-api.jar&#xff0c;下边介绍一下关于servlet的一些api Servlet接口 package javax.servlet;import java.io.IOException;public interface Servlet {//在servlet被载入后和实施服务前由servlet引擎调用。如果init()//产生溢出U…

力扣(leetcode)第1题两数之和(Python)

1.两数之和 题目链接&#xff1a;1.两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素…

jzoj3809-设备塔【并查集】

正题 题目链接:https://jzoj.net/senior/#contest/show/2955/2 题目大意 n∗mn*mn∗m的矩阵&#xff0c;最左边和最右边是联通的&#xff0c;然后每次加入一个墙求能否有一条路径从最上方到最下方。如果有就加入否则不加入。 求最后有多少个墙。 解题思路 我们对于每个墙往八…

32、JAVA_WEB开发基础之jsp

是什么 是简化servlet的一种技术&#xff0c;将html语句和java代码混合在一个文件中进行编写&#xff0c;只对网页中动态产生的内容用java代码编写&#xff0c;静 态内容仍用html语句编写 运行原理 jsp本质上是一个servlet &#xff0c;每个jsp页面第一次被访问时&#xff…

上古时期(大雾)的数据结构pdf

分块点分治Treap byWYCby\ WYCby WYC Part1 分块 概念 就是将nnn个数分成若干个块&#xff0c;然后要处理的时候整块一起的加上局部的直接暴力。 如果将块的大小分配好一般每次都是O(n)O(\sqrt n)O(n​)的。 而且因为十分暴力&#xff0c;所以有很多优秀的性质。 实现方法 …

2017西安交大ACM小学期 刁钻的顾客[3进制+折半枚举]

刁钻的顾客 发布时间: 2017年7月3日 10:23 时间限制: 3000ms 内存限制: 128M 描述 XJTU校园内新开一家商店&#xff0c;可是来了一位刁钻的顾客要购买商品A和商品B。关于商品的质量&#xff0c;共有n个评分&#xff0c;每个评分即一个整数来表示该产品在某一方面的质量。商…

33、JAVA_WEB开发基础之会话机制

会话是什么 一个客户端浏览器与web服务器之间连续发生的一系列请求和响应过程就是会话&#xff0c;这些过程中产生的一系列信息就是会话信息&#xff0c;会话机制就是用于维护这些信息一致性的一种技术。通俗的说就是&#xff0c;一个A账号访问服务器&#xff0c;进行多次交互…

2017西安交大ACM小学期 刷墙[折半枚举+异或]

刷墙 发布时间: 2017年7月3日 12:17 最后更新: 2017年7月6日 22:29 时间限制: 3000ms 内存限制: 128M 描述 小明有一面黑白混搭的墙&#xff0c;他想给把墙重新粉刷一遍。他将任务分给了xx粉刷匠&#xff0c;但是xx粉刷匠提出要求&#xff0c;他要根据原来墙的颜色进行粉…

jzoj4216-[NOIP2015模拟9.12]平方和【Splay】

正题 题目链接:https://jzoj.net/senior/#main/show/4216 题目大意 一个序列要求支持操作 插入一个数区间加上一个数区间求平方和 解题思路 用线段树可以做到区间求平方和。 就是(ab)2a22abb2(ab)^2a^22abb^2(ab)2a22abb2也就是维护区间和平方和和区间个数即可。 但是因为…

34、JAVA_WEB开发基础之EL表达式和标签

EL表达式是什么 一种从域对象中获取数值的简化写法&#xff0c;el表达式语法格式为&#xff1a;${域对象.参数名} 使用方式 取出request范围内的参数&#xff1a;{pageContext.request.username} 或者是 ${requestScope.username} 取出session范围内的参数&#xff1a;{pag…

2017西安交大ACM小学期 选择困难症[折半枚举+二分查找]

选择困难症 发布时间: 2017年7月4日 12:44 最后更新: 2017年7月4日 12:45 时间限制: 5000ms 内存限制: 128M 描述 GG有严重的选择困难症。 早上起床后&#xff0c;需要花很长时间决定今天穿什么出门。 假设一共有k类物品需要搭配选择&#xff0c;每类物品的个数为Ai&…

jzoj3798-[NOIP2014模拟8.22]临洮巨人【前缀和】

正题 题目链接:https://jzoj.net/senior/#main/show/3798 题目大意 长度为nnn的字符串&#xff0c;求有多少个子串中ABCABCABC数量相等。 解题思路 方法好像很巧妙&#xff0c;用Si,A/B/CS_{i,A/B/C}Si,A/B/C​表示到第iii个时A/B/CA/B/CA/B/C的数量。 然后Sr,A−Sl,ASr,B−…

35、JAVA_WEB开发基础之过滤器

是什么 过滤器javaweb的一个重要组件&#xff0c;一种规范&#xff0c;可以对发送到serlvet的请求进行拦截和响应进行过滤。实际开发中可以使用过滤器来对访问服务器的请求进行过滤&#xff0c;以提高安全性 过滤器的原理 可以配置过滤器对指定的请求进行过滤&#xff0c;就…

2017西安交大ACM小学期 毁灭序列[倒跑并查集]

毁灭序列 发布时间: 2017年7月4日 20:58 最后更新: 2017年7月6日 22:23 时间限制: 1000ms 内存限制: 512M 描述 给出一个n(1≤n≤2105)个非负整数a1,a2,...,an的序列&#xff0c;你要按一定顺序毁灭序列的中的数&#xff0c;在每次毁灭一个数后&#xff0c;输出不包括已毁…

P4036-[JSOI2008]火星人【Splay,二分,hash】

正题 题目链接:https://www.luogu.com.cn/problem/P4036 题目大意 一个字符串要求支持 插入一个字符修改一个字符询问两个后缀的最长公共前缀。 解题思路 如果不考虑修改我们可以用二分hashhashhash解决该问题&#xff0c;但是涉及到修改和插入我们考虑用SplaySplaySplay维…

36、JAVA_WEB开发基础之监听器

是什么 顾名思义就是监听器就是监听器&#xff0c;在开发中指的是一种机制&#xff0c;通过这种机制可以对应用中组件的创建、销毁、更改等动作进行监视&#xff0c;根据具体监听信息作出相应的处理 工作原理 就是预先给组件添加一个事件&#xff0c;当这个组件被操作&#…

2017西安交大ACM小学期 神器插座 KMP匹配

神奇插座 发布时间: 2017年7月3日 11:27 最后更新: 2017年7月5日 13:46 时间限制: 500ms 内存限制: 128M 描述 AA所在的国家有一项神奇的发明&#xff1a;插座。这里的插座不仅有两孔、三孔&#xff0c;而是有多种形态&#xff0c;下面用不同的小写字母表示不同的插座。插…

jzoj3626-[LNOI2014]LCA【树链剖分,线段树】

正题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id3626 题目大意 一棵树&#xff0c;每次给出(l,r,z)(l,r,z)(l,r,z)询问∑ilrdepLCA(i,z)\sum_{il}^rdep_{LCA(i,z)}il∑r​depLCA(i,z)​ 解题思路 若询问LCA(x,y)LCA(x,y)LCA(x,y)的深度有一种方法&#xf…

37、JAVA_WEB开发基础之上传功能

是什么 上传指的是将客户端的文件保存到服务器的磁盘中 基本实现原理 读取客户端的文件信息&#xff0c;将文件信息以流的形式发送到服务器&#xff0c;然后服务器将流中的信息保存到本地&#xff0c;以实现文件的上传 实例 注意&#xff1a;提交的表单类型一定是 enctype…

2017西安交大ACM小学期 文本查找[AC自动机]

文本查找 发布时间: 2017年7月5日 00:10 最后更新: 2017年7月5日 13:47 时间限制: 1500ms 内存限制: 128M 描述 给定m种两两不同的关键词&#xff0c;并给定一段文本&#xff0c;问这段文本中有几种关键词出现&#xff08;一种关键词出现多次只算一次&#xff09;。 输入…