题解
2024-06-13 21:41:49
发布于:广东
34阅读
0回复
0点赞
地铁上瞎想出来的
#include <iostream>
#include <cstdio>
using namespace std;
int a[100005];
signed main(){
int n;
long long m;
scanf("%d%lld", &n, &m);
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
long long mx = 0, ct = 0, st = 1;
for(int i = 1; i <= n; i++){
ct += a[i];//采了
while(ct > m){
ct -= a[st++];//超出最大值,前面几个的就不采
}
mx = max(mx, ct);//更新最大值
}
printf("%lld", mx);
return 0;
}
时间复杂度:
全部评论 1
二分的话还要加前缀和优化,时间复杂度O(nlogn)
2024-06-14 来自 广东
0还好当时没听(
2024-06-14 来自 广东
0看懂了,就是遍历开头,找从这开始最多能采几个
2024-06-14 来自 广东
0
有帮助,赞一个