购买装备

发布时间: 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 ;
}

最新文章

  1. ATPCS和AAPCS
  2. 东大OJ-1588: Routing Table
  3. java 代理模式一: 静态代理
  4. golang处理错误的艺术
  5. HDU 2425 DNA repair (AC自动机+DP)
  6. C++ AO读取shapefile的属性值
  7. SQL整理4
  8. iOS 加载Image的两种方式
  9. kafka副本机制之数据可靠性
  10. Android开发模板代码(二)——为ImageView设置图片,退出后能保存ImageView的状态
  11. TCP/IP详解(包含ack,seq)
  12. Shell编程(二)Bash中调用Python
  13. MySQL数据查询之单表查询
  14. RESTframework简介
  15. Linux 第三周 学习笔记和实验
  16. python的pip的配置文件路径在哪里?如何修改pypi源?
  17. Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B. Code For 1
  18. 深入理解JavaScript系列(42):设计模式之原型模式
  19. object-oriented 第二次作业(2)
  20. 使用memcache 存储session

热门文章

  1. postman使用--构建工作流和newman
  2. MVC使用方法
  3. Mac电脑怎么显示隐藏文件、xcode清除缓存
  4. javascript设计模式(张容铭) 第14章 超值午餐-组合模式 学习笔记
  5. app内嵌H5调用分享
  6. substring substr slice 区别
  7. 在已编译安装nginx上动态添加模块
  8. 【cookie】【浏览器】各大浏览器对cookie的限制
  9. 项目之socket
  10. 【HDU 2126】Buy the souvenirs(01背包)