SHoj 420 购买装备
购买装备
发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:05 时间限制: 1000ms 内存限制: 128M
最近盛大的一款游戏传奇世界极其火爆。游戏玩家John,想购买游戏中的装备。已知游戏的商店里有n 件装备,第i 件装备具有属性值a i ,购买需要花费b i 个金币。John想去购买这些装备,但是账号中只有m 个金币,John是个很贪婪的家伙,他想购买尽可能多的装备。并且在保证购买到最多件装备的情况下,他还想让他所购买的装备当中拥有最小属性值的装备的属性值尽可能大。
输入测试组数T
,每组数据第一行输入整数n
(1<=n<=100000
)和m
(1<=m<=10 9
), 接下来有n
行,第i
行有两个数a i
, b i
(1<=a i
,b i <=10000
).
对于每组数据,输出两个数字,第一个数字代表John最多可以购买的装备数,第二个数代表在John购买最多件装备的前提下,所购买的装备当中拥有最小属性值的装备的最大属性值(输入数据保证至少可以购买一件装备)
1
2 4
3 2
2 3
1 3 思路:贪心+二分,首先按照价格从小到大对装备进行排序,贪心选取尽量多的装备数x,在这个装备数量x的前提下对所有选取的装备最小属性值y进行二分搜索,若装备属性值大于等于当前最小属性值的并且能够购买的最多的装备的数量小于x,则最小属性值偏大,可以再小点,否则再调整大一点,二分。。
AC代码:
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<queue>
#include<set>
#include<vector>
#include<cstring>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
const int N_MAX = +;
int t,n;//n件装备,m个金币
ll m;
int num = ;//num为购买装备数
int SXZ[N_MAX];
struct zhuangbei {
int a, b;//ai属性值,bi金币
zhuangbei() {}
zhuangbei(int a,int b):a(a),b(b){
}
bool operator <(const zhuangbei &B)const {
if (this->b != B.b) return this->b < B.b;
else return this->a > B.a;
}
}zb[N_MAX]; bool C(int shuxing) {
ll sum =;
int res=;//买的装备数
for (int i = ; i < n;i++) {
if (sum+zb[i].b<=m) {//装备价格能接受
if (zb[i].a>=shuxing) {//且当前装备属性值大于等于最低属性值,买
sum += zb[i].b;
res++;
if (res >= num)break;//能买的装备足够多了
}
}
else break;
}
if (res<num)return false;//能挑选的数量太少,说明属性值还应该低一些
else return true;
} int main() {
scanf("%d",&t);
while (t--) {
num = ;
scanf("%d%lld",&n,&m);
for (int i = ; i < n;i++) {
scanf("%d%d",&zb[i].a,&zb[i].b);
SXZ[i] = zb[i].a;
}
sort(zb, zb + n);
sort(SXZ,SXZ+n);//对属性值从小到大排,二分出来的属性值必须是其中之一
ll add = ;
for (int i = ; i < n;i++) {
add += zb[i].b;
if (add <= m)num++;
}
int lb = , ub = n;
while (ub-lb>) {
int mid = (ub+lb)>>;
if (C(SXZ[mid]))lb = mid;
else ub = mid;
}
printf("%d %d\n",num,SXZ[lb]); }
return ;
}
SHoj 420 购买装备的更多相关文章
- Android笔记——Activity中的回传数据案例(装备选择)
1.创建程序: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: ...
- 【BZOJ-1017】魔兽地图DotR 树形DP + 背包
1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1566 Solved: 705[Submit][S ...
- 一步一步学习Unity3d学习笔记系1.4单服模式架构
单服模式更适合做手游,只有一个服务器,在程序中通过代码模块来实现各功能,而不是物理模块划分. 登录模块实现,账号数据处理, 用户模块,处理角色权限处理, 匹配模块,匹配战斗 好友模块,负责好友管理 战 ...
- 1017: [JSOI2008]魔兽地图DotR - BZOJ
Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...
- BZOJ 1017 魔兽地图
Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...
- BZOJ [JSOI2008]魔兽地图DotR
1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1243 Solved: 532[Submit][S ...
- 使用CountDownLatch和CyclicBarrier处理并发线程
闲话不说,首先看一段代码: { IValueCallback remoteCallback = new IValueCallback.Stub() { <strong><span s ...
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】
黑白图像直方图 发布时间: 2017年7月9日 18:30 最后更新: 2017年7月10日 21:08 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...
- [BZOJ]1017 魔兽地图DotR(JSOI2008)
BZOJ第一页做着做着就能碰到毒题,做到BZOJ1082小C就忍了,没想到下一题就是这种东西.这种题目不拖出来枭首示众怎么对得起小C流逝的青春啊. Description DotR (Defense ...
随机推荐
- mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
解决方案如下:
- fluent_python1
Magic Method python中有些跟对象本身有关的方法, 以两个下划线开始,两个下划线结束, 一般称为魔法方法(magic method). 比如 obj[key] 的背后就是 __geti ...
- Objective-C分类 (category)和扩展(Extension) 的区别
http://blog.csdn.net/yhawaii/article/details/6992094 http://blog.163.com/wangy_0223/blog/static/4501 ...
- 如何写好一个vue组件,老夫的一年经验全在这了【转】 v-bind="$attrs" 和 v-on="$listeners"
如何写好一个vue组件,老夫的一年经验全在这了 一个适用性良好的组件,一种是可配置项很多,另一种就是容易覆写,从而扩展功能 Vue 组件的 API 来自三部分——prop.事件和插槽: prop 允许 ...
- C++ C++ 值传递、指针传递、引用传递详解
这一篇博客写的不错: https://www.cnblogs.com/dingxiaoqiang/p/8012578.html
- Repbase library|divergence rate|self-sequence alignment|genomic rearrangement|cutoffs|breakpoint
(Panda, dog and human repeat comparison):与其他动物比较重复序列 我们使用Repbase 库(重复序列库)+已知的转录原件序列+识别软件,评估出转录原件占比,并 ...
- JS面试题--使用for循环打印1-10,每个数字出现的间隔约500ms
又来刷面试题啦,哈哈. 要求:使用for循环打印1-10,每个数字出现的间隔约500ms. 分析:考察点--闭包,块级作用域 方式一.使用闭包+立即执行函数,自己当时的思路也是这样想的,但是,结果却没 ...
- (2)zabbix硬件需求
1. 硬件需求 无非就是cpu.内存.硬盘之类的1.1 CPU由你的zabbix数据库使用情况来做决定,如果你监控的项目越多,那你的cpu要越好.具体多好,下面有个表格 1.2 内存与硬盘最基本的需求 ...
- (1) zabbix进程构成
进程介绍 zabbix_agentd客户端守护进程,此进程收集客户端数据,例如cpu负载.内存.硬盘使用情况等 zabbix_getzabbix工具,单独使用的命令,通常在server或者proxy端 ...
- 朋友去面试Python工程师,又带回来几道基础题,Python面试题No10
第1题: print 调用 Python 中底层的什么方法? print print() 用 sys.stdout.write() 实现 import sys print('hello') sys.s ...