二分查找。
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 ",st); 27 }