http://acm.hdu.edu.cn/showproblem.php?pid=2570
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2822 Accepted Submission(s): 966
思路 :易知 n瓶 互相参合后浓度为 (p1*v+p2*v+p3*v.....+pn*v)/n*v 即 (p1+p2+.....pn)/n;
所以我们把浓度排序 按从小到大 然后求这样的和 看最大能参合几个
看代码 水的不能再水了
#include<stdio.h> #include<algorithm> using namespace std; int a[1000],sum[1000]; int main() { int i,cas,n,v ,p; double ap; scanf("%d",&cas); while(cas--) { scanf("%d %d %d",&n,&v,&p); sum[0]=0; ap=0; for(i=1;i<=n;i++) {scanf("%d",&a[i]);} sort(a+1,a+1+n); for(i=1;i<=n;i++) sum[i]=sum[i-1]+a[i]; // printf("ca"); for(i=1;i<=n;i++) { double mid=(double)sum[i]/i; if(mid<=(double)p) ap=mid; else break; } printf("%d %.2lf\n",(i-1)*v,ap/100); } return 0; }