您的位置:首页 > 其它

codeforces 279B - Books

2017-04-07 23:18 399 查看
二分查找。

#include<cstdio>
int n,t,a[100000+5];
bool judge(int num)
{
int sum=0;
for(int j=1;j<=num;j++) sum+=a[j];
if(sum<=t) return true;//先把第一本书作为开始,读num本书,算出耗时
for(int i=2;i<=n-num+1;i++)
{
sum=sum-a[i-1]+a[i+num-1];//对于之后的第二本、第三本所为开始的读num本书,只要去掉最前面一个,再在后面添上一个就可以了,算是一定的时间复杂度上的优化
if(sum<=t) return true;
}
return false;
}
int main()
{
scanf("%d%d",&n,&t);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int st=0,ed=n+1,mid;
while(ed-st>1)
{
mid=st+(ed-st)/2;
if(judge(mid)) st=mid;
else ed=mid;
}
printf("%d\n",st);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeforces 二分查找