神他喵UKE
查看原帖
神他喵UKE
64767
rts_GOD楼主2020/9/11 19:08

没用二分,用取平均值排除法+枚举做的,一开始第9个点一直WA,后来增大了枚举范围,然后就这样了。。。

感觉算法没问题啊,为什么会这样呢???

评测记录 https://www.luogu.com.cn/record/38273577

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
	int l,n,k;
	scanf("%d%d%d",&l,&n,&k);
	int x[n+2],begin=0,end,sum_l=l,sum_n=n+k+1;
	for(int i=1;i<=n;++i){
		scanf("%d",&end);
		x[i]=end-begin;
		begin=end;
	}
	x[n+2]=l-end;
	sort(x+1,x+n+2);
	double average;
	int pos=1;
	while(average=(double)sum_l/sum_n){//排除无关值
		if(x[pos]<average){
			for(int i=pos;i<=n+1;++i){
				if(x[i]<average){
					pos=i+1;
					sum_l-=x[i];
					sum_n--;
				}
				else break;
			}
		}
		else break;
	}
	int A=ceil(average),num_divide=0;
	while(1){//枚举结果
		num_divide=0;
		for(int i=pos;i<=n+1;++i) num_divide+=ceil((double)x[i]/A)-1;
		if(num_divide>k) A++;
		else break;
	}
	printf("%d",A);
	return 0;
}
2020/9/11 19:08
加载中...