不知道为啥只有80分,求助
查看原帖
不知道为啥只有80分,求助
1115066
easonxiang楼主2024/12/6 10:53
#include <vector>
#include <iostream>
#include <queue>
#include <algorithm>
#include <set>
#include <map>
#include <cmath>
#include <climits>
#include <stdio.h>
#include <stack>

using namespace std;

bool check(vector<int> &v, int expect, long long sum, int k) {
   bool ret = true;
   for (int i = v.size() - expect; i < v.size(); ++i) {
      if (v[i] >= expect) {
         break;
      }
      int diff = expect - v[i];
      if (diff > k || diff > sum || diff > v.size()) {
         ret = false;
         break;
      }
      sum -= diff;
   }
   return ret;
}

int main() {
   int N, K, L;
   cin >> N >> K >> L;

   vector<int> v(N);
   for (int i = 0; i < N; ++i) {
      cin >> v[i];
   }
   long long sum = K * L;
   sort(v.begin(), v.end());
   int left = 0, right = N;
   int ans = 1;
   while (left <= right) {
      int mid = left + (right - left) / 2;
      if (check(v, mid, sum, K)) {
         left = mid + 1;
         ans = mid;
      } else {
         right = mid - 1;
      }
   }
   cout << ans;

   return 0;
}

2024/12/6 10:53
加载中...