您的位置:首页 > 其它

bzoj 4590: [Shoi2015]自动刷题机

2016-08-03 20:58 309 查看
       二分答案sb题。

AC代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define inf 100000000000000ll
using namespace std;

int n,m,a[100005];
int calc(ll x){
int i,ans=0; ll sum=0;
for (i=1; i<=n; i++){
sum=max(0ll,sum+a[i]);
if (sum>=x){ sum=0; ans++; }
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
int i;
for (i=1; i<=n; i++) scanf("%d",&a[i]);
ll l=1,r=inf,mid;
while (l<r){
mid=(l+r)>>1;
if (calc(mid)<=m) r=mid; else l=mid+1;
}
ll x=l; l=1; r=inf;
while (l<r){
mid=(l+r+1)>>1;
if (calc(mid)>=m) l=mid; else r=mid-1;
}
l=x;
if (calc(l)!=m || calc(r)!=m) puts("-1");
else printf("%lld %lld\n",l,r);
return 0;
}

by lych

2016.8.3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: