CodeForces - 68B




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);
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章