出题人的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; }