数据太水
查看原帖
数据太水
764844
raozf楼主2024/9/7 16:30

rt,我二分+模拟都能过

AC Code:

#include <bits/stdc++.h>
#define int long long

using namespace std;

const int kMaxN = 1e4 + 3;

int n, t;

int d[kMaxN];

int sum[kMaxN];

bool check(int mid) {
  int now = mid + 1;
  int res = 0;
  for (int j = 1; j <= mid; j++) {
    sum[j] = d[j];
  }
  while (now <= n) {
    int minn = 1e5;
    for (int j = 1; j <= mid; j++) {
      minn = min(minn, sum[j]);
    }
    res += minn;
    for (int j = 1; j <= mid; j++) {
      sum[j] -= minn;
      if ((!sum[j])) sum[j] = d[now++];
    }
  }
  sort (sum + 1, sum + 1 + mid);
  int cnt = 0;
  for (int i = 1; i <= mid; i++) {
    cnt += (max(0ll, sum[i] - cnt));
  }
  res += cnt;
  return res <= t;  
}
signed main() {
//  freopen("cowdance.in", "r", stdin);
//  freopen("cowdance.out", "w", stdout);
  ios::sync_with_stdio(false);
  cin.tie(0);cout.tie(0);
  cin >> n >> t;  
  for (int i = 1; i <= n; i++) {
    cin >> d[i];
  }
  int l = 0, r = n;
  while (l + 1 < r) {
    int mid = l + r >> 1;
    if (check (mid)) {
      r = mid;
    } else {
      l = mid;
    }
  }
  cout << r << "\n";
  return 0;
}
2024/9/7 16:30
加载中...