题目描述
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
Input | Output |
---|---|
4 5 3 1 2 1 | 3 |
Sample 2
Input | Output |
---|---|
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啊 不是很理解
写的不好,如果出现问题欢迎批评指正啊 还有就是哪个大佬可以帮忙看一下下面这个错误代码吗 纠结了好久 谢谢啦