求助,只对了第4个测试点
查看原帖
求助,只对了第4个测试点
933414
User_10_noob楼主2024/10/19 18:30
#include<bits/stdc++.h>
#define rep(a,b,c) for (int i=a;i<=b;i+=c)
#define out(n) cout<<(n)<<' '
#define num_out(n) write(n);printf(" ")
#define ll long long
using namespace std;
template<typename T>inline void read(T &n);
template<typename T>inline void write(T n);
const int N=1e5+5;
int n,m,a[N];
inline bool check(int x){
	int sum=0,cnt=0;
	for (int i=1;i<=n;i++){
		if (sum+a[i]>x) sum=a[i],cnt++;
		else sum+=a[i];
	}
	return cnt<=m;
}
int main(){
	#ifndef ONLINE_JUDGE
	freopen("debug.in","r",stdin);
	#endif
	read(n);read(m);
	int l,r=1e9,ans;//答案不超过1e9 
	rep(1,n,1) read(a[i]),l=max(l,a[i]);
	while (l<=r){
		int mid=l+r>>1;
		if (check(mid)) ans=mid,r=mid-1;
		else l=mid+1;
	}
	write(ans);
	return 0;
}

template<typename T>inline void read(T &n){
	n=0;T f=1;
	char c;
	do{
		c=getchar();
		if (c=='-') f=-1;
	}while (c<'0'||c>'9');
	while (c>='0'&&c<='9'){
		n=(n<<1)+(n<<3)+(c^48);
		c=getchar();
	}
	n*=f;
}
template<typename T>inline void write(T n){
	if (n<0) putchar('-'),n=-n;
	if (n>9) write(n/10);
	putchar(n%10+'0');return;
}

2024/10/19 18:30
加载中...