D - Average Superhero Gang Power 贪心 思维 精度

传送门
思路:做这种思维题就是找每一步的状态,我们把每一个状态分为两种 加上当前可加值 和 删去一个当前最小值,再维护一个 最大值即可。这里需要注意的是,k与m 要经常比较大小。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long a[100005];
int main()
{
    long long n, m, k;
    cin >> n >> k >> m;
    long long sum = 0;
    double maxn = 0.0;
    double maxnn = 0.0;
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
        sum += a[i];
    }
    maxnn = (sum * 1.0) / n;
    sort(a + 1, a + n + 1);
    for(int i = 1; i <= n; i++)
    {
        if(n == i)
        {
            maxnn = (sum + min(k, m)) > maxnn ? (sum + min(k, m)) : maxnn;//还剩一个
            break;
        }
        maxn =  (double)max((sum + min(k * (n - i + 1), m)) / (1.0 * (n - i + 1)), (1.0 * (sum - a[i]))/ (1.0 * (n - i)));
        maxnn = max(maxnn, maxn);
        m--;
        if(m == 0)
        break;
        sum -= a[i];
    }
    printf("%.20lf\n",maxnn);
    return 0;
}

发布了241 篇原创文章 · 获赞 8 · 访问量 4940

猜你喜欢

转载自blog.csdn.net/weixin_43960370/article/details/103221582