全TLE 求解 悬关
查看原帖
全TLE 求解 悬关
1108111
XYY62012楼主2024/3/24 15:47

哪里导致超时了呢?

悬赏关注

#include<bits/stdc++.h>
using namespace std;
int n,c,x[10009009];
int maxn;
int mid,z,y;//中间,左,右 
int sum,last;//已使用的牛栏数量,上一头牛的坐标 
bool check(int m){
	sum=0,last=x[1];
	for(int i=2;i<=n;i++){
		if(x[i]-last<mid) sum++;
		else last=x[i];
		if(sum>maxn) return false;
	} 
	return true;
}
int main(){
	//输入: 
	cin>>n>>c;
	for(int i=1;i<=n;i++){
		cin>>x[i];
	}	
	maxn=n-c;//最多可剩余的牛栏数量 
	sort(x+1,x+n+1);//顺序 
	z=1,y=x[n]-x[1];//定左边界和右边界 
	while(z<=y){
		mid=(z+y)/2;//求中间值 
		if(check(mid)) z=mid;
		else y=mid;
	} 
	cout<<z<<endl;
	return 0;	
}

栓Q thanks

2024/3/24 15:47
加载中...