1. 程式人生 > 其它 >輸出和浮點二分

輸出和浮點二分

xmuoj

//!皮卡丘分番茄醬
#include<bits/stdc++.h>
using namespace std;

const int N = 1e4 + 10;

int n, k;
int q[N];
vector<double> v;

bool iseaten(vector<double> v, double mid, int n){
    if(accumulate(v.begin(), v.end(), 0.0) < mid * n) return false; 
    priority_queue<double> q;
    for(auto t : v) q.push(t);
    while(n --){
        // if(fabs(mid - 15.75) < 1)
        // cout << n << ' ' << q.top() << "*******" << endl;
        if(q.top() - mid < 0){
            return false;
        }
        else{
            q.push(q.top() - mid);
            q.pop();
        }
    }
    return true;
}

void eaten(vector<double> v, int n){
    // cout << "eaten++++++++++" << endl;
    int nn = v.size();
    double l = 0, r = v[nn - 1];
    // cout << l << ' ' << r << endl;
    while(r - l > 1e-6){

        double mid = (l + r) / 2;
        // cout << mid << "{{{{{" << endl;
        if(iseaten(v, mid, n)) l = mid;
        else r = mid; 
    }
    cout << fixed << setprecision(4) << l << endl;
}

int main(){
    cin >> k >> n;
    
    for(int i = 0; i < k; ++i){
        int x;
        cin >> x;
        v.push_back(x * x);
    }
    sort(v.begin(), v.end());
    eaten(v, n);
    // cout << setbase(16) << 19;
    return 0;
}