疑惑,为什么基本一样的代码一个通过,一个WA最后一个点,求助大佬,悬赏一关
查看原帖
疑惑,为什么基本一样的代码一个通过,一个WA最后一个点,求助大佬,悬赏一关
1037273
封禁用户楼主2023/8/17 16:22

AC 代码如下:

#include<bits/stdc++.h>
using namespace std;
long long n,ans,m,mins=INT_MIN;
long long arr[100001];
bool check(int x){
    int cnt=1,s=0;
    for(int i=0;i<n;i++){
        if(s+arr[i]<=x){
            s+=arr[i];
        }
        else{
            cnt++;
            s=arr[i];
        }
    }
    return cnt<=m;
}
int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++) {
        cin>>arr[i];
        ans+=arr[i];
        if(arr[i]>mins){
            mins=arr[i];
        }
    }
    int l=mins,r=ans,mid;
    while(l<=r){
        mid=(l+r)/2;
        if(check(mid)){
            r=mid-1;
        }
        else{
            l=mid+1;
        }
    }
    cout<<r+1;
    return 0;
}

WA 代码如下:

#include<bits/stdc++.h>
using namespace std;
long long n,m,arr[100001],v,maxs=INT_MIN;
bool check(int x){
	int cnt=1,s=0;
	for(int i=1;i<=n;i++){
		s+=arr[i];
		if(s>x){
			cnt++;
			s=arr[i];
		}
	}
	return cnt<=m;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
		v+=arr[i];
		maxs=max(maxs,arr[i]);
	}
	long long l=maxs,r=v,mid;
	while(l<=r){
		mid=(l+r)/2;
		if(check(mid)){
			r=mid-1;
		}
		else{
			l=mid+1;
		}
	}
	cout<<r+1;
	return 0;
}

求助dalao悬赏一关

2023/8/17 16:22
加载中...