社区讨论

不知道为啥只有80分,求助

P7557 [USACO21OPEN] Acowdemia S参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m4c5jrm4
此快照首次捕获于
2024/12/06 10:54
去年
此快照最后确认于
2025/11/04 13:18
4 个月前
查看原帖
CPP
#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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...