购买装备

发布时间: 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 复制

1
2 4
3 2
2 3
样例输出1

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 购买装备的更多相关文章

  1. Android笔记——Activity中的回传数据案例(装备选择)

    1.创建程序: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: ...

  2. 【BZOJ-1017】魔兽地图DotR 树形DP + 背包

    1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1566  Solved: 705[Submit][S ...

  3. 一步一步学习Unity3d学习笔记系1.4单服模式架构

    单服模式更适合做手游,只有一个服务器,在程序中通过代码模块来实现各功能,而不是物理模块划分. 登录模块实现,账号数据处理, 用户模块,处理角色权限处理, 匹配模块,匹配战斗 好友模块,负责好友管理 战 ...

  4. 1017: [JSOI2008]魔兽地图DotR - BZOJ

    Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...

  5. BZOJ 1017 魔兽地图

    Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...

  6. BZOJ [JSOI2008]魔兽地图DotR

    1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1243  Solved: 532[Submit][S ...

  7. 使用CountDownLatch和CyclicBarrier处理并发线程

    闲话不说,首先看一段代码: { IValueCallback remoteCallback = new IValueCallback.Stub() { <strong><span s ...

  8. “盛大游戏杯”第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 描述 在一个矩形的灰度图像上,每个 ...

  9. [BZOJ]1017 魔兽地图DotR(JSOI2008)

    BZOJ第一页做着做着就能碰到毒题,做到BZOJ1082小C就忍了,没想到下一题就是这种东西.这种题目不拖出来枭首示众怎么对得起小C流逝的青春啊. Description DotR (Defense ...

随机推荐

  1. Android计算器简单逻辑实现

    Android计算器简单逻辑实现 引言: 我的android计算器的实现方式是:按钮输入一次,就处理一次. 但是如果你学过数据结构(栈),就可以使用表达式解析(前缀,后缀)处理. 而这个方式已经很成熟 ...

  2. wxwidgets编译及环境配置

    wxwidgets编译及环境配置 安装步骤: 到www.CodeBlocks.org下载并安装CodeBlocks,最好下载MinGW版本的,可以省掉安装和配置GCC的麻烦. 到www.wxWidge ...

  3. Codeforces Round #318 (Div. 2) B Bear and Three Musketeers (暴力)

    算一下复杂度.发现可以直接暴.对于u枚举a和b,判断一下是否连边,更新答案. #include<bits/stdc++.h> using namespace std; int n,m; ; ...

  4. 1991: C语言实验——大小写转换

    1991: C语言实验——大小写转换 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 183  Solved: 109[Submit][Status][We ...

  5. 如何用node命令和webpack命令传递参数

    1. 比如在项目中我们的publicPath需要根据服务器环境的变化而变化,这时我们会写一个配置文件,在webpack.config.js中读取,可以 如何才能 取到变量呢? 这里介绍一种方法: 如果 ...

  6. 第六次作业 :使用Excel制作成绩单

  7. C语言格式化说明符

    1.1.1 格式化输入输出函数一.printf()函数printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息.在编写程序时经常会用到此函数.printf()函数的调用格式为: ...

  8. React初识整理(一)

    一.React的特点 1.自动化的UI状态管理:自动完成数据变化与界面效果的更新. 2.虚拟DOM:创建1个虚拟的dom节点树,放在内存里(内存修改数据效率高),数据变化时先修改内存里的虚拟DOM,然 ...

  9. PHP 把字符转换为 HTML 实体 - htmlentities() 函数

    定义和用法 htmlentities() 函数把字符转换为 HTML 实体. 语法 htmlentities(string,quotestyle,character-set) 参数 描述 string ...

  10. jsDate()

    var myTime=new Date();//myTime的数据类型为(typeof) object //下面得到的都为number 类型 getFullYear();年 四位数字返回年份. get ...