悬关
查看原帖
悬关
1252442
lucy2012楼主2024/3/21 10:29

为什么这样能过

#include<bits/stdc++.h>
using namespace std;
long long lon,n,m,a[100000],l,r,mid;
int find(int mid){
	int cnt=0,num=0,i=0;
	while(i<n+1){
		i++;
		if(a[i]-a[num]<mid) 
		    cnt++;
		else
		    num=i;
	}
	return cnt<=m;
}
int main(){
    cin>>lon>>n>>m;
    a[0]=0;a[n+1]=lon;
    l=1;r=lon;
    if(n==0) {cout<<lon;return 0;}
    for(int i=1;i<=n;i++)
		cin>>a[i];
	while(l<r){
		mid=(l+r+1)>>1;
		if(find(mid)) l=mid;
		else r=mid-1;
	}
	cout<<l;
	return 0;
}	

但这样不能

#include<bits/stdc++.h>
using namespace std;
long long lon,n,m,a[100000],l,r,mid;
int find(int mid){
	int cnt=0,num=0,i=0;
	while(i<=n+1){//这里改了
		i++;
		if(a[i]-a[num]<mid) 
		    cnt++;
		else
		    num=i;
	}
	return cnt<=m;
}
int main(){
    cin>>lon>>n>>m;
    a[0]=0;a[n+1]=lon;
    l=1;r=lon;
    if(n==0) {cout<<lon;return 0;}
    for(int i=1;i<=n;i++)
		cin>>a[i];
	while(l<r){
		mid=(l+r+1)>>1;
		if(find(mid)) l=mid;
		else r=mid-1;
	}
	cout<<l;
	return 0;
}	
2024/3/21 10:29
加载中...