A.出题人的RP值

链接:https://ac.nowcoder.com/acm/contest/358/A

题意:

众所周知,每个人都有自己的rp值(是个非负实数),膜别人可以从别人身上吸取rp值。
然而当你膜别人时,别人也会来膜你,互膜一段时间后,你们就平分了两人原有的rp值,当你膜过一个人之后,你就不能再膜那个人了
出题人发现自己的rp值为x,出题人周围有n个人,第i个人的rp值为a[i]
你要选择膜哪些人和膜人的顺序,使出题人的最终rp值最大

第一行两个数n,x,人数和出题人的初始rp值
第二行n个数,第i个数a[i]表示第i个人的rp值
输出保留三位小数

思路:

将n个人从小到大排序,从小到大遍历,膜RP值比自己高的就好。

代码:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000+10;
int a[MAXN];
 
int main()
{
    int n,x;
    scanf("%d%d",&n,&x);
    for (int i = 1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    double sum = x;
    for (int i = 1;i <= n;i++)
        if (a[i] > sum)
            sum = (sum + a[i])/2;
    printf("%.3lf
",sum);
 
    return 0;
}

  

原文地址:https://www.cnblogs.com/YDDDD/p/10290761.html