二分求调!
查看原帖
二分求调!
519573
Daniel_yao楼主2022/8/20 16:55
#include <bits/stdc++.h>
#define int long long
#define H 19260817
#define rint register int
#define For(i,l,r) for(int i=l;i<=r;i++)
#define FOR(i,r,l) for(int i=r;i>=l;i--)
#define MOD 1000003
#define mod 1000000007

using namespace std;

inline int read() {
  rint x=0,f=1;char ch=getchar();
  while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
  while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
  return x*f;
}

void print(int x){
  if(x<0){putchar('-');x=-x;}
  if(x>9){print(x/10);putchar(x%10+'0');}
  else putchar(x+'0');
  return;
}

const int N = 100100;

int n, m, a[N], l = 0, r = 1e9+1, ans;

bool check(int l) {
  int len = 0, num = 0;
  For(i,1,n) {
    if(num + a[i] <= l) {
      num += a[i];
    } else {
      len++, num = a[i];
    }
  }
  return len >= l;
}

signed main() {
  n = read(), m = read();
  For(i,1,n) a[i] = read();
  while(l + 1 < r) {
    int mid = l + r >> 1;
    if(check(mid)) {
      ans = mid;
      l = mid;
    } else {
      r = mid;
    }
  }
  cout << ans << '\n';
  return 0;
}

2022/8/20 16:55
加载中...