Advertisement
Dmaxiya

成绩统计 参考代码

Mar 25th, 2025
528
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long LL;
  5. const int maxn = 100000 + 100;
  6. int n, k;
  7. LL T;
  8. LL num[maxn], sum[maxn], tmp[maxn], sum2[maxn];
  9.  
  10. bool judge(int n) {
  11.     memcpy(tmp, num, sizeof(num));
  12.     sort(tmp + 1, tmp + 1 + n);
  13.     for (int i = 1; i <= n; ++i) {
  14.         sum[i] = sum[i - 1] + tmp[i];
  15.         sum2[i] = sum2[i - 1] + tmp[i] * tmp[i];
  16.     }
  17.     double mn = 1e100;
  18.     for (int i = k; i <= n; ++i) {
  19.         double avg = (sum[i] - sum[i - k]) / k;
  20.         mn = min(mn, sum2[i] - sum2[i - k] - 2 * avg * (sum[i] - sum[i - k]) + k * avg * avg);
  21.     }
  22.     return mn / k <= T;
  23. }
  24.  
  25. int main() {
  26. #ifdef ExRoc
  27.     freopen("test.txt", "r", stdin);
  28. #endif
  29.     ios::sync_with_stdio(false);
  30.  
  31.     cin >> n >> k >> T;
  32.     if (n < k) {
  33.         cout << -1 << endl;
  34.         return 0;
  35.     }
  36.     for (int i = 1; i <= n; ++i) {
  37.         cin >> num[i];
  38.     }
  39.     int low = k - 1;
  40.     int high = n + 1;
  41.     int mid;
  42.     while (high - low > 1) {
  43.         mid = (high + low) >> 1;
  44.         if (judge(mid)) {
  45.             high = mid;
  46.         } else {
  47.             low = mid;
  48.         }
  49.     }
  50.     cout << (high == n + 1 ? -1 : high) << endl;
  51.  
  52.     return 0;
  53. }
  54.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement