#问题求解与编程# 实验五 E读书时间

读书时间

发布时间: 2018年4月17日 19:40   时间限制: 1000ms   内存限制: 128M

描述

小A刚度过一段繁忙的时期,终于有空闲的时间来读(wan)书(shua)了。今天,他有t分钟的空闲时间来读书。因此,他跑到了图书馆开始他的读书大计。图书馆中有n本书,编号从1~n,小A读完每本书所花的时间为ai分钟。

小A决定从随机的一本书开始读,然后一本接一本的读下去。比如,假设小A决定从第i本书开始读,那么他的读书顺序编号就是i+1,i+2...如果他把自己的空闲时间花光了,那他就不会再读下去了。所以,小A想请你帮他确定一下读的第一本书的编号,使得他所能读完的书的本数最大(若最后一本书他读不完,则这本书不能算进去),输出他所能读的书本数的最大值。

输入

第一行包含两个整数n,t(1<=n<=10^5,1<=t<=10^9)——n表示图书馆的书本数,t表示小A的空闲时间(分钟)。
第二行包含n个整数a1,a2,...,an(1<=ai<=10^4),ai表示小A读完第i本书所需时间(分钟)。

输出

输出一个整数,表示小A所能读的书本数的最大值。

样例输入1
4 5
3 1 2 1
样例输出1
3
———————————————————————————————————————————————————

没时间了..没做完 上标程分析吧:

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
	int n,t;
	int a[100010];
	while(scanf("%d%d",&n,&t)!=EOF)
	{
		int i;
		a[0]=0;
		for(i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
			a[i]=a[i-1]+a[i];
		}//保存基值
		int maxn=0;
		for(i=1;i<=n;i++)
		{
			int l=1,r=i,mid;
			if(t>=a[i])
			{
				maxn=max(maxn,i);
				continue; 
			}//时间足够时
			while(l<r)
			{
				mid=l+r>>1;//???
				if(t<a[i]-a[mid])
					l=mid+1;
				else
					r=mid;
			}
			maxn=max(maxn,i-l);
		}//真没看懂
		printf("%d\n",maxn);
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值