链接: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值比自己高的就好。
代码:
#includeusing 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;}