社区讨论

萌新求助,这题不能用二分吗?

P1209[USACO1.3] 修理牛棚 Barn Repair参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lod0w6xr
此快照首次捕获于
2023/10/30 22:56
2 年前
此快照最后确认于
2023/11/05 09:14
2 年前
查看原帖
写的是二分,但是只有80分,现在也没改出来
这题是不能用二分,还是就是我的程序写挂了啊qwq
CPP
#include<bits/stdc++.h>
using namespace std;
int m,s,c,l,r,mid,ans=2147483647,a[205];
bool check(int maxx) 
{ 
	int now=0,cnt=0,sum=0;
	now=1; cnt++;
	for(int i=2;i<=c;i++) 
	if((maxx-now)<(a[i]-a[i-1])) 
	{ 
		cnt++; sum+=now; now=1; 
	} 
	else now+=(a[i]-a[i-1]);
	sum+=now;
	if(cnt<=m) 
	{ 
		ans=min(ans,sum);
		return 1;
	} 
	return 0;
} 
int main() 
{ 
	scanf("%d%d%d",&m,&s,&c);
	for(int i=1;i<=c;i++) scanf("%d",&a[i]);
	sort(a+1,a+1+c);
	l=1; r=s;
	while(l<=r) 
	{ 
		mid=(l+r)>>1;
		if(check(mid)) r=mid-1;
		else l=mid+1;
	} 
	printf("%d\n",ans);
	return 0;
} 

回复

4 条回复,欢迎继续交流。

正在加载回复...