64分二分答案求调
查看原帖
64分二分答案求调
1545314
Westbrook_楼主2025/2/8 10:50
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
long long a[N]; 
long long n,k;//全局变量 
long long check(long long mid){//检查mid对不对 
	long long cnt=0;
	for(long long i=1;i<=n;i++)
		cnt+=a[i]/mid;//把所有的树遍历,统计在mid下能切多少条 
	if(cnt==k)return 1;//如果刚好等于,说明符合 
	else if(cnt>k)return 2;//如果切的数量比目标多,返回第二种情况 
	else if(cnt<k)return 3;//少就返回第三种 
}
int main(){
	cin>>n>>k;
	for(long long i=1;i<=n;i++)
	    cin>>a[i];  
	long long l=1,r=1e8+10,mid,ans=0;
	while(l<=r){//二分切的长度 
		mid=(l+r)/2;
		if(check(mid)==1){//如果符合题意 
			ans=mid;//先存一个保底答案 
			l=mid+1;//看看有没有更大的 
		}
		else if(check(mid)==2)//如果返回2就说明mid长度太短了,切的树太多 
			l=mid+1;
		else if(check(mid)==3)//mid太长,不够 
			r=mid-1;//弄短点 
	}
	cout<<ans; 
}
2025/2/8 10:50
加载中...