Codeforces 279B - Books

二分查找。

 1 #include<cstdio>
 2 int n,t,a[100000+5];
 3 bool judge(int num)
 4 {
 5     int sum=0;
 6     for(int j=1;j<=num;j++) sum+=a[j];
 7     if(sum<=t) return true;//先把第一本书作为开始,读num本书,算出耗时
 8     for(int i=2;i<=n-num+1;i++)
 9     {
10         sum=sum-a[i-1]+a[i+num-1];//对于之后的第二本、第三本所为开始的读num本书,只要去掉最前面一个,再在后面添上一个就可以了,算是一定的时间复杂度上的优化
11         if(sum<=t) return true;
12     }
13     return false;
14 }
15 int main()
16 {
17     scanf("%d%d",&n,&t);
18     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
19     int st=0,ed=n+1,mid;
20     while(ed-st>1)
21     {
22         mid=st+(ed-st)/2;
23         if(judge(mid)) st=mid;
24         else ed=mid;
25     }
26     printf("%d\n",st);
27 }

 



 

posted @ 2017-04-07 23:18  Dilthey  阅读(225)  评论(0编辑  收藏  举报