问题标题: 酷町堂:2792

0
0
已解决
李锦昊
李锦昊
中级天翼
中级天翼
本弱**待完成代码
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100005],ans,b[100005],k;
bool cheak(int x){
	int cnt=1,last=1;
	for(int i=1;i<=n;i++){
		if(a[i]-a[last]<x){ //极有可能不对
			cnt++;
			last=i;
		}
	}
	return (cnt<=m); //极有可能不对
}
int main(){
	cin>>k>>n>>m;
	a[0]=0,a[n+1]=k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	} 
	int l=1,r=k/n;
	int mid;
	while(l<r){
		int mid=(l+r+1)/2;
		if(cheak(mid)){
			 l=mid;
		}
		else r=mid-1;
		cout<<l<<" "<<r<<endl;

	}
	cout<<l;
	return 0;
}
样例没过!

求大佬解答

本周五结贴

李锦昊在2022-03-04 17:35:30追加了内容

李锦昊在2022-03-04 18:22:42追加了内容

30分代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[100005],ans,k;
bool b[100005];
int main(){
	cin>>k>>n>>m;
	a[0]=0,a[n+1]=k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=k/n;i>=1;i--){
		int x=m;
		memset(b,0,sizeof(b));
		for(int j=1;j<=n;j++){
			if(a[j]-a[j-1]<i){
				x--;
				b[j]=true;
				if(b[j-1]==true){
					b[j]=false;
					x++;
				}
//				if(b[j-1]!=true) cout<<a[j]<<" "<<a[j-1]<<endl;
			}
//			else cout<<a[j]<<" ";
		}
        if(a[n+1]-a[n]<i&&b[n]==false) x--;
		if(x>=0){
			cout<<i;
			return 0;
		}
	}
	return 0;
}

 


0
0
0
我要回答