读书好多读书读好书

题目描述

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

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

输入描述

第一行包含两个整数n,t(1<=n<=10^5,1<=t<=10^9)——n表示图书馆的书本数,t表示xyb的空闲时间(分钟)。

第二行包含n个整数a1,a2,...,an(1<=ai<=10^4),ai表示xyb读完第i本书所需时间(分钟)。

输出描述

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

Sample 1

InputOutput
4 5
3 1 2 1
3

Sample 2

InputOutput
3 3
2 2 3
1

注意:1.多组输入  2.不能对输入数据进行排序  3.最开始写的时候因为审题不清还犯了一个错误,我以为在第一本还没看的前提下,读完最后一本还可以拐回去看第一本(依此类推)

ac代码:(暴力求解)

#include <iostream>
#include <string.h>
using namespace std;
const int N = 1e5 + 10;
long long a[N], sum;//数据过大
int n, t, cnt, q;

int main() {
	while (cin >> n >> t) {
		q = 0;//q的值后期会变动,所以要记得还原
		memset(a, 0, sizeof a);
		for (int i = 0; i < n; i++)
			cin >> a[i];
		for (int i = 0; i < n; i++) {
			sum = cnt = 0;//不知道为啥,写到if语句里就过不了了
			if (a[i] <= t) {
				for (int j = i; j < n; j++) {
					sum += a[j];
					if (sum <= t)
						cnt++;//统计连续读的书本数目
					else
						break;
				}
			}
			if (cnt > q)
				q = cnt;
		}
		cout << q << endl;
	}
	return 0;
}

问题代码:

下面这个是最开始写的,在我的电脑上第一个样例运行到一半就运行不下去了,但在别人的电脑上可以出正确结果,交上去一直是段错误(里面还存在一些调试时写的内容)

#include <iostream>
#include <cmath>
using namespace std;
const int N = 1e5 + 10;
long long a[N], b[N];
int n, t;

int find(int x, int l) {
	if (a[x] + a[x + 1] <= t && x + 1 < n) {
		a[x + 1] += a[x];
		cout << "x=" << x << " a[x]= " << a[x] << " a[x+1]= " << a[x + 1] << endl;
		//l += 1, x += 1;
		//cout << "x= " << x << " l= " << l << endl;
		find(x + 1, l + 1);
	} else {
		cout << "l=" << l << endl;
		return l;
	}
}

int main() {
	cin >> n >> t;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
		b[i] = a[i];
	}
	int q = 0, ss;
	for (int i = 0; i < n; i++) {
		if (a[i] <= t) {
			cout << "i= " << i << endl;
			ss = find(i, 1);
		}
		cout << "ss= " << ss << endl;
		if (ss > q)
			q = ss;
		cout << endl;
		for (int i = 0; i < n; i++)
			a[i] = b[i];
	}
	cout << q << endl;
	return 0;
}

 我搜了一下这句英文好像是内存不足,但是题目给的内存限制是262144 kB啊 不是很理解

 写的不好,如果出现问题欢迎批评指正啊    还有就是哪个大佬可以帮忙看一下下面这个错误代码吗 纠结了好久  谢谢啦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值