社区讨论
为什么这种二分写法是错误的?
P4343[SHOI2015] 自动刷题机参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjrtvci
- 此快照首次捕获于
- 2025/11/04 07:28 4 个月前
- 此快照最后确认于
- 2025/11/04 07:28 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
LL k,a[100005];
int check(LL mid) {
LL now=0;
int cnt = 0;
for(int i=1;i<=n;i++) {
now = max(now+a[i],0ll);
if(now>=mid) now=0,cnt++;
}
return cnt;
}
int main() {
scanf("%d%lld",&n,&k);
for(int i=1;i<=n;i++)
scanf("%lld",a+i);
LL l = 1, r = 4e18;
while(l<=r) {
LL mid = (l+r)>>1;
if(check(mid)<k)
r = mid-1;
else l = mid+1;
}
if(check(r)!=k)
return printf("-1"),0;
int R = r;
l = 1, r = 4e18;
while(l<=r) {
LL mid = (l+r)>>1;
if(check(mid)>k)
l = mid+1;
else r = mid-1;
}
printf("%lld %lld",l,R);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...