hlg-1332 买电脑 ---二分


































MM买电脑





Time Limit: 1000 MS Memory Limit: 65536 K







Total Submit: 178(25
users)
Total Accepted: 80(25
users)
Rating:  Special Judge: No
Description

在学习了一些理论基础后,MM决定要买一台电脑,搞ACM没有电脑是不行的,可是MM对电脑硬件方面一窍不通,于是找来GG帮忙,GG可是软硬件通吃,装一台电脑更是不在话下了。为了适应需求,他们打算购买电脑的各零件,然后回来自己组装。对于电脑中的每一个零件他们买且只买一个。现在的问题是每一种零件都有好多品牌,品牌下又分好多型号,不同型号的价钱不等,同时它们的质量也不一样。而整个电脑的质量取决于各零件中质量最差的那个。所以我们需要在不超出预支金额的情况下,尽量使得质量最差的那个零件的质量最大化,这样我们购买的电脑总体质量才不至于太低。

Input

输入数据的第一行有一个整数T,代表测试数据的组数。接下来有T组测试数据。

对于每组测试数据:

第一行有两个整数n和b,分别代表需要购买的零件种类,以及预支金额。

第二行到第n+1行每行代表一个零件的一些信息,这些信息以”类型 型号 价格
质量”的格式给出,它们两两之间用空格分开。这四个属性中:

“类型”为一个字符串,仅包含小写字母。不超过20个字符。

“型号”为一个字符串,包含字母,数字,下划线。不超过20个字符。

“价格”为一个正整数。

“质量”为一个正整数,数值越大则质量越高。

范围:

T ≤ 100

1 ≤ n ≤ 1 000

1 ≤ b ≤ 1 000 000 000

0 ≤ price ≤ 1 000 000

0 ≤ quality ≤ 1 000 000
000

Output

对于每组测试数据,输出一个整数并换行。这个整数代表新电脑的最大质量(即最小的质量最大是多少)

Sample Input
1
18 800
processor 3500_MHz 66 5
processor 4200_MHz 103 7
processor 5000_MHz 156 9
processor 6000_MHz 219 12
memory 1_GB 35 3
memory 2_GB 88 6
memory 4_GB 170 12
mainbord all_onboard 52 10
harddisk 250_GB 54 10
harddisk 500_FB 99 12
casing midi 36 10
monitor 17_inch 157 5
monitor 19_inch 175 7
monitor 20_inch 210 9
monitor 22_inch 293 12
mouse cordless_optical 18 12
mouse microsoft 30 9
keyboard office 4 10

Sample Output
9
Hint
每组数据保证有解。
Source
2012 Spring Contest 5 - Binary Search,
Greedy, DP

分析:

刚开始我对性能从大到小进行枚举,对于每一类物品取价格大于等于该枚举值的价格最小的物品

900+过的

其实对于所有的性能进行二分即可

if(cost > per_cost)

high = mid;

else

low = mid;

这样就可以了

代码:

  1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <algorithm>
5 #include <map>
6 using namespace std;
7
8 const int maxn = 1005;
9
10 struct point
11 {
12 string s;
13 int a, b;
14 }poin[maxn];
15
16 int n, sum_b;
17 bool check(int x)
18 {
19 int sum = 0;
20 string s1 = poin[0].s;
21 int st = 0, en = 0;
22 for(int i = 0; i < n; i++)
23 {
24 if(poin[i].s != s1)
25 {
26 en = i - 1;
27 bool flag = false;
28 int max_num = 0xffffff;
29 for(int i = st; i <= en; i++)
30 {
31 if(poin[i].b >= x)
32 {
33 flag = true;
34 if(max_num > poin[i].a)
35 {
36 max_num = poin[i].a;
37 }
38 }
39 }
40 if(!flag)
41 return false;
42 sum += max_num;
43 st = i;
44 s1 = poin[i].s;
45 }
46 }
47 //printf("*%d\n",sum);
48 if(sum <= sum_b)
49 return true;
50 else
51 return false;
52 }
53
54 int main()
55 {
56 int t;
57 //freopen("1511.txt","r",stdin);
58 scanf("%d",&t);
59 while(t--){
60 scanf("%d %d",&n, &sum_b);
61 string str;
62 int num[maxn] = { 0 };
63 int k = 0;
64 for(int i = 0; i < n; i++)
65 {
66 cin>>poin[i].s>>str>>poin[i].a>>poin[i].b;
67 num[k++] = poin[i].b;
68 }
69 poin[n].s = "asdf";
70 n++;
71 sort(num, num + k);
72 //int ans_num[maxn];
73 //int k_num = 1;
74 //ans_num[0] = num[0];
75 //for(int i = 1; i < k; i++){
76 // if(num[i] != num[i - 1]){
77 //ans_num[k_num++] = num[i];
78 //printf("%d ",ans_num[k_num - 1]);
79 //}
80 //}
81 int low = 0, high = k - 1;
82 while(low <= high){
83 //printf("%d\n",low);
84 int mid = (low + high) >> 1;
85 if(!check(num[mid]))
86 high = mid - 1;
87 else
88 low = mid + 1;
89 }
90 //printf("%d %d\n",high, low);
91 /*
92 //num[k] = 0;
93 int ans = 0;
94 for(int i = k - 1; i >= 0; i--)
95 {
96
97 if(num[i] == num[i+1])
98 continue;
99 if(check(num[i]))
100 {
101 ans = num[i];
102 break;
103 }
104 // printf("%d %d\n",num[i],check(num[i]));
105 }
106 */
107 printf("%d\n",num[high]);
108 }
109 return 0;
110 }

时间: 2024-12-16 06:07:19

hlg-1332 买电脑 ---二分的相关文章

HLG 1039 修路 (二分+贪心)

链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1039 Description 前段时间,某省发生干旱,B山区的居民缺乏生活用水,现在需要从A城市修一条通往B山区的路.假设有A城市通往B山区的路由m条连续的路段组成,现在将这m条路段承包给n个工程队(n ≤ m ≤ 300).为了修路的便利,每个工程队只能分配到连续的若干条路段(当然也可能只分配到一条路段或未分配到路段).假设每个工程队

买电脑需要考虑的电脑配置

品牌:(个人罗列,排名不分先后) 华硕.联想.苹果.戴尔.三星.神舟.ThinkPad.麦本本.宏碁.雷神.微星.惠普.炫龙.外星人.中柏.MACHENIKE.火影.清华同方.威士龙.未来人类.机械革命.小艾.NGAME.东芝.索尼.海尔 以下可以通过鲁大师查看: 电脑的三大件: CPU(Central Processing Unit,中央处理器)——主要是Intel(官方中文英特尔)和AMD两家公司,可以查看类型.频率和核心数 主要是酷睿系列:酷睿i3,酷睿i5,酷睿i7以及AMD系列:AMD

html从入门到买电脑(四)

2 011年,twitter的"一小撮"工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK OTTO和Jacob Thornton所设计和建立,在github上开源之后,迅速成为该站上最多人watch&fork的项目.大量工程师踊跃为该项目贡献代码,社区惊人地活跃,代码版本进化非常快速,官方文档质量极其高(可以说是优雅),同时涌现了许多基于Bootstrap建设的网站:

html从入门到买电脑(三)

CSS3中和动画有关的属性有三个   transform.  transition 和 animation.下面来一一说明:         transform   从字面来看transform的释义为改变,使-变形:转换 .这里我们就可以理解为变形.那都能怎么变呢? none 表示不进行变换: rotate 旋转            transform:rotate(20deg) 旋转角度可以为负数.需要先有transform-origin定义旋转的基点可为left top center r

权威第三方报告——获取IT产品竞争力信息的主要途径,类似你买电脑前上的xx论坛看实力评估

Gartner is known for its huge influence on purchasing as well as an unequaled events business. Forrester Research benefits from Gartner's weaknesses. Clients rate its peer communities most highly, and its reprints business is clearly a threat to Gart

在预装win8的电脑上换win7系统讲解

现在买电脑,如果电脑预装的系统是win8系统,那么这个电脑的默认启动模式应该就是UEFI模式,现在UEFI模式正在逐渐取代传统模式.UEFI启动需要一个独立的分区,它将系统启动文件和操作系统本身隔离,可以更好的保护系统的启动,这个模式能加快开机速度等一些优点. 下面说说如何在预装win8系统的电脑上安装win7系统 之前有很多朋友遇到一个装系统的问题,就是明明系统装好了,为什么开机还是进入不了系统,提示说找不到系统文件. 有两个方法可以解决在预装win8换win7系统出现的这个问题. 方法一:将

原装win8系统电脑崩溃问题解决

原装win8系统电脑崩溃问题解决 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:之所以撰写本篇关于win8原装系统电脑崩溃的博文,一是要吐槽一下原装win8让博主遭受了一系列的痛苦,二是要总结一下此次系统出故障的解决经验并共享,三是要提醒一下我和读者,千万不要懒惰而疏于对重要数据的备份. win8原装系统的罪过 不仅我在这里吐槽,很多人买电脑原装的是win8,然后担心有些软件不兼容,所以希望能装个双系统.但是到目前为止,我周围一些被公认为"电脑高

电脑故障,路由器及网络

春上买了2台二手的电脑,设备多了之后,第1出现的是,网络问题. 没有网络,电脑就是一堆废铁,对我来说. 先说说,买电脑之前的网络情况. 网络接入,电信20M宽带,电信给了个"猫",喵喵~~ 有个路由器,接入猫,提供无线,传说中的wifi,我的笔记本.iPad.手机,直接通过wifi连接无线上网. 多了2台台式电脑,没无线网卡.无线接收器.先通过有线连接,然后发现只能有1台能上网,另外1台就不行了,也就是说只能同时存在2个设备上网. 最后折腾来折腾去,iPad也无法上网了,只能通过笔记本

常用品牌电脑的型号特点

小Q:天空包含着白天与黑夜,就算黑夜的阳光远不及白天,天空也不能失去黑夜,就像黑夜离不开繁星 以下内容献给徘徊在买电脑边缘和相了解电脑的'小白'朋友们,不足之处请指正! =========================================================== 一个懂电脑的人购选电脑时会根据自己的需求,自己搭配cpu·内存·硬盘·主板·芯片组·显卡·显示器·光驱·电池·品牌·外观·是否支持扩展·预装系统·品牌售后·性价比.........但是对于我们这些小白来说的话,