大胃王比赛 - 求条 - 给解决方案!(本人蒟蒻,大佬勿喷)


30分

#include<bits/stdc++.h>
using namespace std;
const long long MaxN=1e5+10; 
long long n,c,t;
long long arr[MaxN];

bool check(long long x){
	long long last=0,res=0;
	for(long long i=0;i<n;i++){
		if(last+arr[i]<=(__int128)(x*t)){
			last+=arr[i];
		}else{
			last=arr[i];
			res++; 
		}
	}
	return res<c;
}

int main(){
	cin>>n>>c>>t;
	for(long long i=0;i<n;i++){
		cin>>arr[i];
	}
	
	long long l=0,r=INT_MAX;
	long long ans=-1; 
	while(l<=r){
		long long mid=(l+r)/2;
		
		if(check(mid)){
			r=mid-1;
			ans=mid;
		}else{
			l=mid+1;
		}
	}
	
	cout<<ans<<endl;
    return 0;
}

样例

5 3 4
5 8 3 10 7
4

3 2 1
1 5 1
6

3 2 1
1 1 5
5

既然x*t都要爆long long,那last+arr[i]是不是也有可能爆long long呢?

check是干啥的

二分条件啊

你是啥班啊,感觉好像我没做过,要是级别比我大那我肯定没做过

@刘子睿 他是普及的

哦,那再见

okk,check写假了,此贴结

捕捉张益祯

???