求助!!!wa了一个点
查看原帖
求助!!!wa了一个点
245019
Glass_Testament楼主2023/3/20 17:32

第7个点怎么都过不了

查了一个小时了QWQ

求大佬帮忙看看!

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,k;
ll ans;
struct hi{
	ll x,y;
}a[100005];
bool cmp(hi o,hi t){
	return o.x<t.x;
}
bool check(ll m){
	ll pos=a[1].x;//当前位置
	int t=1;
	//到第t个区间;
	for(int i=2;i<=n;i++){
		if(pos+m<=a[t].y){//如果目前所在区间就可以放下
			pos+=m;
			continue;
		} 
		int f=0;
		for(int j=t+1;j<=k;j++){//找新区间
			if(pos+m<=a[j].y){
				pos=max(a[j].x,pos+m);
				t=j;
				f=1;
				break;
			}
		}
		if(f==0){
			return false;
		}
	}
	return true;
}
int main(){
	scanf("%lld %lld",&n,&k);
	for(int i=1;i<=k;i++){
		scanf("%lld %lld",&a[i].x,&a[i].y);
	}
	//往右找,mid加1,减r
	sort(a+1,a+1+k,cmp);
	ll l=0,r=(a[k].y/n)+10;
	while(l<r){
		ll mid=(l+r+1)>>1;
		if(check(mid)){
			ans=mid;
			l=mid;	
		}
		else r=mid-1;
	}
	printf("%lld",ans);
	return 0;
}
2023/3/20 17:32
加载中...