题目:Average Superhero Gang Power
思路:
最开始有一个贪心的想法,就是删到只剩下最大的数。
hack数据,来自QvQ:
Input
3 2 10
1 1 1
Output
1.5
但是基于这个贪心思想,可以想到先排序,排序后的序列,一定从前往后顺着删得到的答案更优。
然后O(n)枚举断点就好。
代码:
#include<bits/stdc++.h>
using namespace std;#define maxn 100000
#define read(x) scanf("%d",&x)
#define db doubleint n,K,m;
int a[maxn+5];db sum[maxn+5];int main() {
read(n),read(K),read(m);for(int i=1;i<=n;i++) read(a[i]);sort(a+1,a+n+1);for(int i=n;i>=1;i--) {
sum[i]=sum[i+1]+a[i];}db ans=0;for(int i=1;i<=min(n,m+1);i++) {
db s=0;s=(sum[i]+min((db)m-i+1,K*((db)n-i+1)))/(n-i+1);ans=max(ans,s);}printf("%lf",ans);return 0;
}