题目
原题链接:B. Books
题意
有n本书,限定时间t,每本书的阅读时间为ai,问最多连续看几本书。
开始没有处理好连续的书,导致WA了几次。后面参考其他作者的代码。
每次看完后,记录时间,若时间不够,则丢掉最前面的一本,加入当前本,每次记录最大连续值。
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,t,a[100000];
int sum=0,k=0,ans=0;
scanf("%d%d",&n,&t);
for(int i=0; i<n; i++) {
scanf("%d",&a[i]);
sum+=a[i];
while(sum>t){
sum-=a[k];
k++;
}
ans=max(ans,i-k+1);
}
printf("%d\n",ans);
return 0;
}
用queue来实现
#include<bits/stdc++.h>
#include<queue>
using namespace std;
int main() {
int n,t,a;
queue<int> s,tmp;
int k=0,ans=0;
scanf("%d%d",&n,&t);
for(int i=0; i<n; i++) {
scanf("%d",&a);
while(t<a && !s.empty()) {
t+=s.front();
s.pop();
}
if(t>=a) {
s.push(a);
t-=a;
}
// tmp=s;
// while(!tmp.empty()) {
// printf("%d ",tmp.front());
// tmp.pop();
// }
// printf("\n");
int ss=s.size();
ans=max(ans,ss);
}
printf("%d\n",ans);
return 0;
}