http://codeforces.com/problemset/problem/68/B
題目大意:
有n個蓄電池 每個蓄電池內有初始電量 現在要通過蓄電池之間電量相互轉移的方法使每個蓄電池內的電量 電量轉移有損失 每轉移x電量 損失%k 問怎樣轉移使最後蓄電池內電量最多輸出最多電量
分析:
沒找到貪心的方法直接暴力二分了 二分枚舉最後的電量 看能不能通過轉移達到這個電量 蓄電池電量高於mid的減去mid減去損失後給小於mid的蓄電池 最後結果應該爲0
AC代碼:
#include<bits/stdc++.h>
using namespace std;
double a[1000005];
int main (){
int n,k;
while (scanf ("%d%d",&n,&k)!=EOF){
for (int i=0;i<n;i++) scanf ("%lf",&a[i]);
sort(a,a+n);
double l=a[0],r=a[n-1];
double mid=(l+r)/2.0;
while (r-l>=1e-6){
double sum=0;
for (int i=0;i<n;i++)
if(a[i]>mid) sum+=(a[i]-mid)-(a[i]-mid)*k/100.0;
else sum-=mid-a[i];
if (sum<-1e-7) r=mid;
else if (sum>1e-7) l=mid;
else break;
mid=(l+r)/2.0;
}
printf ("%.9lf\n",mid);
}
}