J - AC自动机
P4343 [SHOI2015]自动刷题机
二分左右端点,验证答案,题意不是很清楚,导致一直没有写出来
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010;
int a[N];
LL n,k;
int check(LL mid)
{
LL res=0,sum=0;
for(int i=1;i<=n;i++)
{
sum+=a[i];
if(sum<0) sum=0;
if(sum>=mid) res++,sum=0;
}
return res;
}
signed main()
{
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
LL l,r;
l=1,r=1e18;
while(l<r)
{
LL mid=l+r>>1;
if(check(mid)<=k) r=mid;
else l=mid+1;
}
if(check(r)!=k)
{
cout<<"-1";
return 0;
}
cout<<l<<" ";
l=1,r=1e18;
while(l<r)
{
LL mid=l+r+1>>1;
if(check(mid)>=k) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}