只做了很小的改动,20pts->100pts,求问为什么
查看原帖
只做了很小的改动,20pts->100pts,求问为什么
737158
yszkddzyh楼主2023/1/3 21:36

原来的代码(#1#2#3#5WA):

#include <iostream>
using namespace std;
int l,r,mid,n,m,ans,a[100003];
bool check(int x){
	int s=0,c=0;
	for(int i=1;i<=n;i++){
		if(s+a[i]<=x) s+=a[i];
		else s=a[i],c++;
	}
	return c<=m;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i],l=l>a[i]?l:a[i],r+=a[i];
	while(l<=r){
		mid=l+(r-l)/2;
		if(check(mid)) ans=mid,r=mid-1;
		else l=mid+1;
	}
	cout<<ans;
	return 0;
}

AC代码:

#include <iostream>
using namespace std;
int l,r,mid,n,m,ans,a[100003];
bool check(int x){
	int s=0,c=0;
	for(int i=1;i<=n;i++){
		if(s+a[i]<=x) s+=a[i];
		else s=a[i],c++;
	}
	return c<m; //小于等于改成了小于
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i],l=l>a[i]?l:a[i],r+=a[i];
	while(l<=r){
		mid=l+(r-l)/2;
		if(check(mid)) ans=mid,r=mid-1;
		else l=mid+1;
	}
	cout<<ans;
	return 0;
}

为什么会这样呢?

2023/1/3 21:36
加载中...