【NOIP模拟】能源

解析:

       二分答案即可。

 

代码:
 

#include <bits/stdc++.h>
using namespace std;

const int Max=10010;
int n,m;
double l,r,k,mid,num[Max];

inline double mx(double a,double b){return a<b?b:a;}

inline bool check(double mid)
{
	double sum1=0.0,sum2=0.0;
	for(int i=1;i<=n;i++) if(num[i]>mid) sum1+=(num[i]-mid)-(num[i]-mid)*k/100.0;
	for(int i=1;i<=n;i++) if(num[i]<mid) sum2+=mid-num[i];
	if(sum1<sum2-1e-10) return 0;
	return 1;
}

inline void solve()
{
	for(int i=1;i<=50;i++)
	{
	  mid=(l+r)/2;
	  if(check(mid)) l=mid;
	  else r=mid;
	}
}

int main()
{
	scanf("%d%lf",&n,&k);
	for(int i=1;i<=n;i++) scanf("%lf",&num[i]),r=mx(r,num[i]);
	solve();
	printf("%.6lf",l);
	return 0;
}

 

相关文章: