出题人的RP值
链接:https://ac.nowcoder.com/acm/problem/21627
来源:牛客网

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

这道题其实是让你做两件事:
1.为了方便求出题人的RP值和RP[i]的平均数需要先sort一下
2.求平均数时需要先分类考虑:如果RP[i]比出题人现在的值大的话就求它俩的平均数,因为题目说了要求出题人最大可能的值,所以只有符合条件的话才会算平均数,这样不会把出题人的RP值拉低。
AC代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main(){
    int n;
    double x;
    cin >> n >> x;
    int rp[n];
    for(int i = 0;i < n;i++){
        cin >> rp[i];
    }
    double ans = 0;
    sort(rp,rp+n);//从小到大排序
    for(int i = 0;i < n;i++){
        if(rp[i] > x){
            x = (x + rp[i]) / 2;//如果符合条件就求平均数
        }
    }
    printf("%.3lf",x);//保留三位小数
    return 0;
}