HDU 2570 迷瘴(贪心 过程处理不好会导致精度问题)
来源:互联网 发布:js选中form 编辑:程序博客网 时间:2024/04/30 00:39
迷瘴
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Problem Description
通过悬崖的yifenfei,又面临着幽谷的考验——
幽谷周围瘴气弥漫,静的可怕,隐约可见地上堆满了骷髅。由于此处长年不见天日,导致空气中布满了毒素,一旦吸入体内,便会全身溃烂而死。
幸好yifenfei早有防备,提前备好了解药材料(各种浓度的万能药水)。现在只需按照配置成不同比例的浓度。
现已知yifenfei随身携带有n种浓度的万能药水,体积V都相同,浓度则分别为Pi%。并且知道,针对当时幽谷的瘴气情况,只需选择部分或者全部的万能药水,然后配置出浓度不大于 W%的药水即可解毒。
现在的问题是:如何配置此药,能得到最大体积的当前可用的解药呢?
特别说明:由于幽谷内设备的限制,只允许把一种已有的药全部混入另一种之中(即:不能出现对一种药只取它的一部分这样的操作)。
幽谷周围瘴气弥漫,静的可怕,隐约可见地上堆满了骷髅。由于此处长年不见天日,导致空气中布满了毒素,一旦吸入体内,便会全身溃烂而死。
幸好yifenfei早有防备,提前备好了解药材料(各种浓度的万能药水)。现在只需按照配置成不同比例的浓度。
现已知yifenfei随身携带有n种浓度的万能药水,体积V都相同,浓度则分别为Pi%。并且知道,针对当时幽谷的瘴气情况,只需选择部分或者全部的万能药水,然后配置出浓度不大于 W%的药水即可解毒。
现在的问题是:如何配置此药,能得到最大体积的当前可用的解药呢?
特别说明:由于幽谷内设备的限制,只允许把一种已有的药全部混入另一种之中(即:不能出现对一种药只取它的一部分这样的操作)。
Input
输入数据的第一行是一个整数C,表示测试数据的组数;
每组测试数据包含2行,首先一行给出三个正整数n,V,W(1<=n,V,W<=100);
接着一行是n个整数,表示n种药水的浓度Pi%(1<=Pi<=100)。
每组测试数据包含2行,首先一行给出三个正整数n,V,W(1<=n,V,W<=100);
接着一行是n个整数,表示n种药水的浓度Pi%(1<=Pi<=100)。
Output
对于每组测试数据,请输出一个整数和一个浮点数;
其中整数表示解药的最大体积,浮点数表示解药的浓度(四舍五入保留2位小数);
如果不能配出满足要求的的解药,则请输出0 0.00。
其中整数表示解药的最大体积,浮点数表示解药的浓度(四舍五入保留2位小数);
如果不能配出满足要求的的解药,则请输出0 0.00。
Sample Input
31 100 101002 100 2420 303 100 2420 20 30
Sample Output
0 0.00100 0.20300 0.23
题意:中文题,就不逐字翻译了,大致讲一下,有n种体积V都相同,浓度为Pi%的万能药水,挑选尽可能多的万能药水混合,需满足混合后的浓度≤W%。
解题思路:毫无疑问,此题是一道贪心题,为了能够选择尽可能多的万能药水,所以我们应该先选浓度低的,可以达到降低混合后浓度的作用。
所以,我们可以先将万能药水按浓度排个序,从小到大逐一判断加入当前万能药水会不会导致混合后浓度超过W%即可
有一点需要注意的是,如果在比较浓度是否超过W%这个过程中,你将浓度转化成溶质质量来比较的话,在判断x>w时,需记成x- 0.000001>w才能保证不会精度出错,否则,按照以下代码的写法即可AC。#pragma comment(linker, "/STACK:1024000000,1024000000")#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>#include<stack>#include<math.h>#include<vector>#include<map>#include<set>#include<stdlib.h>#include<cmath>#include<string>#include<algorithm>#include<iostream>#define exp 1e-10using namespace std;const int N = 105;const int inf = 2147483647;const int mod = 2009;int p[N];int main(){ int t,n,v,w,i; double C; scanf("%d",&t); while(t--) { C=0; scanf("%d%d%d",&n,&v,&w); for(i=0;i<n;i++) scanf("%d",&p[i]); sort(p,p+n); for(i=0;i<n;i++) if((C+p[i])/(i+1)<=w) C+=p[i]; else break; if(!i) puts("0 0.00"); else printf("%d %.2f\n",i*v,C/i/100); } return 0;}菜鸟成长记
0 0
- HDU 2570 迷瘴(贪心 过程处理不好会导致精度问题)
- 精度处理的问题
- 精度处理问题
- display:inline 会导致表格宽度 不好调整
- HDU 5935 Car(贪心、精度爆炸)
- HDU-5935 Car 逆推 贪心 精度
- HDU - 2570 迷瘴(贪心)
- 贪心 HDU 2570 迷瘴
- HDU 2570 迷瘴 贪心
- [HDU](2570)迷瘴 ---贪心
- 数据精度问题的处理
- 浮点数精度问题处理
- HDU-4803-贪心+卡精度(挺难的)
- 贪心问题 HDU 1051
- HDU 1009 贪心问题
- HDU 2570 迷瘴 (贪心)
- hdu 2570 迷瘴 低级贪心
- HDU 2570 迷瘴 (贪心)
- cocos2dx场景A跳转到场景B,然后场景B再向A回传值(委托设计模式实现)。
- 有些事做起来比想象中容易
- Codeforces 474 A
- 使用Jsoup消除不受信任的HTML (来防止XSS攻击)
- Android在线切换主题(换肤),支持直接替换整个布局
- HDU 2570 迷瘴(贪心 过程处理不好会导致精度问题)
- range 和xrange
- 自定义ViewPager实现轮播效果
- ZOJ3811--Untrusted Patrol(DFS)
- 跨站脚本攻击-----为什么要过滤危险字符串
- Ember启动报错
- neo4j 入门教学_2
- 富文本编辑器的跨站脚本问题参考
- Item 18:让接口容易被正确使用,不易被误用 Effective C++笔记