TAG
- 芝士水题、算法 − 【贪心】 芝士水题、算法 - 【贪心】 芝士水题、算法−【贪心】时间复杂度
- O ( N ) O(N) O(N)
//
#include <bits/stdc++.h>
using namespace std;
#define int long long // N * 1e9 > int
const int N = 5e5 + 6;
int a[N];
void solve() {
int n, s;
scanf("%lld%lld", &n, &s);
for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
sort(a + 1, a + n + 1);
double avg = (double)s / n;
double sum = 0;
for (int i = 1; i <= n; i++) {
// (1) 钱不够 avg = s / n
// (2) 钱不够 now_avg = s / (n - i + 1)
if (a[i] * (n - i + 1) < s) {
sum += (avg - a[i]) * (avg - a[i]);
s -= a[i];
} else {
// (3) 钱足够
double now_avg = (double)s / (n - i + 1);
sum += (now_avg - avg) * (now_avg - avg) * (n - i + 1);
break;
}
}
printf("%.4lf\n", sqrt(sum / n));
}
signed main() {
int t = 1;
// scanf("%d", &t);
while (t--) solve();
return 0;
}
实现细节
爆 int
参考示意图
-
`
参考链接
- `
作者 | 乐意奥AI