HELP
查看原帖
HELP
390568
Twistzz__楼主2023/11/25 22:47

第一段代码是过了的,第二段代码改了一下条件过不了了,虽然我觉得是对的(太蒟蒻了),麻烦各位大佬康康为啥不对:

代码一:

#include<bits/stdc++.h>
using namespace std;
int a[50004],L,n,m,l,r;
long long mid,ans;
bool f(int aim){
	int cnt=0,j=0;
	for(int i=1;i<=n+1;i++)a[i]-a[j]<aim ? cnt++:j=i;			
	return cnt<=m ? true:false;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>L>>n>>m;
	a[n+1]=L;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		l=min(l,a[i]-a[i-1]);
	}
	r=L;
	while(l<=r){
		mid=(l+r)>>1; 
		f(mid) ? ans=mid,l=mid+1:r=mid-1;
	}
	cout<<ans;
	return 0;
}
 

代码二:

#include<bits/stdc++.h>
using namespace std;
int a[50004],L,n,m,l,r;
long long mid,ans;
bool f(int aim){
	int cnt=0,j=0;
	for(int i=1;i<=n+1;i++)a[i]-a[j]<aim ? cnt++:j=i;			
	return cnt<m ? true:false;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>L>>n>>m;
	a[n+1]=L;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		l=min(l,a[i]-a[i-1]);
	}
	r=L;
	while(l<=r){
		mid=(l+r)>>1; 
		f(mid) ? l=mid+1:ans=mid,r=mid-1;
	}
	cout<<ans;
	return 0;
}
 

就是f函数里面的取等条件改了一下,还有ans的,但我想不懂为啥不对(好像跟题解写得雷同?)求助大佬

2023/11/25 22:47
加载中...