P8664 [蓝桥杯 2018 省 A] 付账问题
贪心,把钱最多的放在后面兜底,前面的能付多少付多少
#include <iostream> #include <stdio.h> #include <algorithm> #include <string> #include <math.h> #define For(i, j, n) for (int i = j; i <= n; ++i) using namespace std; const int N = 5e5 + 5; int n; long double ans, a[N], s, avg; int find(long double a[], long double x) // a[]中小于x的最大的数字的下标 { int l = 0, r = n; while (l < r) { int mid = l + r + 1 >> 1; if (a[mid] < x) l = mid; else r = mid - 1; } return l; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> s; avg = s/(n * 1.0); for (int i = 1; i <= n; i++) { cin >> a[i]; } sort(a + 1, a + n + 1); long double t; for(int i = 1, j = n; i <= n; i++, j--) { t = min(a[i], s/(j * 1.0)); s -= t; ans += (t - avg) * (t - avg); } ans = sqrt(ans / (n*1.0)); printf("%.4Lf", ans); return 0; }
注意long double要用%Lf
本文作者:Gold_stein
本文链接:https://www.cnblogs.com/smartljy/p/17985056
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步