社区讨论
萌新求助,这题不能用二分吗?
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 条回复,欢迎继续交流。
正在加载回复...