链接: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\n",sum); return 0;
}

  

05-02 12:49