关于附加点的提示
查看原帖
关于附加点的提示
1348515
yjc20110811楼主2025/8/29 16:22

附加点TLE的可以看看下面的数据

1 2 100000  
0 1

#include<bits/stdc++.h>
using namespace std;
int sign[100005];
int ans=INT_MAX;
int check(int n,int k,int len){
	int cnt=0,prev=0;
	for(int i=1;i<=n+1;i++){
		while(sign[i]-prev>len){
			cnt++;
			prev+=len;
		}
		prev=sign[i];
	}
	cout<<"cnt:"<<cnt<<endl;
	return cnt<=k;
}
int main(){
	int L,n,k;
	cin>>L>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>sign[i];
	}
	sign[n+1]=L;
	int l=0,r=INT_MAX,mid;
	while(l<=r){
		mid=(l+r)/2;
//		if(mid==0){
//			break;
//		}
		cout<<"mid:"<<mid<<" ";
		if(check(n,k,mid)){
			ans=min(ans,mid);
			r=mid-1;
		}
		else{
			l=mid+1;
		}
	}
	cout<<ans;
	return 0;
}

正确答案应该是1,如果不加被我注释掉的特判就会出现下面的情况

mid:1073741823 cnt:0
mid:536870911 cnt:0
mid:268435455 cnt:0
mid:134217727 cnt:0
mid:67108863 cnt:0
mid:33554431 cnt:0
mid:16777215 cnt:0
mid:8388607 cnt:0
mid:4194303 cnt:0
mid:2097151 cnt:0
mid:1048575 cnt:0
mid:524287 cnt:0
mid:262143 cnt:0
mid:131071 cnt:0
mid:65535 cnt:0
mid:32767 cnt:0
mid:16383 cnt:0
mid:8191 cnt:0
mid:4095 cnt:0
mid:2047 cnt:0
mid:1023 cnt:0
mid:511 cnt:0
mid:255 cnt:0
mid:127 cnt:0
mid:63 cnt:0
mid:31 cnt:0
mid:15 cnt:0
mid:7 cnt:0
mid:3 cnt:0
mid:1 cnt:0
mid:0

当mid为0时程序运行会死循环,所以当mid为0时要退出循环

2025/8/29 16:22
加载中...