3 1 100 10 100 2 100 24 20 30 3 100 24 20 20 30
0 0.00 100 0.20 300 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-10 using 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; }菜鸟成长记