解析:
二分答案即可。
代码:
#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;
}