求助 必关
  • 板块灌水区
  • 楼主chty
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/4 17:51
  • 上次更新2024/10/4 17:57:12
查看原帖
求助 必关
1162593
chty楼主2024/10/4 17:51

这是我代码
题目传送门

#include<bits/stdc++.h>
using namespace std;
long long arr[10005];
long long n,m,io;
bool cheak(long long x){
	
	long long cnt=0,s=0,a=0,x1=0;
	for(int i=1;i<=n;i++){
		cnt+=arr[i]/x;
		a=arr[i]%x;
		x1=arr[i+1]%x;
		if((a+s)/x>0){
			cnt+=(a+s)/x;
			a=0;
		}
		else if((a+x1)/x>0){
			cnt+=(a+x1)/x;
			arr[i+1]-=x-a;
			a=0;
		}
		s=a;
		if(cnt>=m){
			return true;
		}
	}		
	return false;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		cin>>n>>m;
		fill(arr+1,arr+1+n,0);
		io=0;
		for(long long i=1;i<=n;i++){
			cin>>arr[i];
			io+=arr[i];
		}
		long long l=1,r=io/m+1,ans=0;
		while(l<=r){
			long long mid=(l+r)/2;
			if(cheak(mid)==true){
				ans=mid;
				l=mid+1;
			}else{
				r=mid-1;
			}
		}
		cout<<ans*m<<endl;
	}
}

样例第四组错了

2024/10/4 17:51
加载中...