学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
给定一个长度为 n 的数列 A={a1,a2,…,an}。请你在数列 A 中选取长度为 m 的连续子段,并按照从左到右的顺序依次存入数组 b 中(从下标 11 开始存储),请问
最大值是多少。
其中,
等价于 1×b1+2×b2+…+i×bi+…+m×bm。
【输入】
第一行,包含两个整数 n,m。
第二行,包含 n 个整数 a1,a2,…,an。
【输出】
一行一个整数,表示答案。
【输入样例】
4 2
5 4 -1 8
【输出】
15
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, m, a[200010];
long long s[200010], ss[200010];
int main()
{
cin >> n >> m;
for (int i=1; i<=n; i++) {
cin >> a[i];
s[i] = s[i-1] + a[i];
ss[i] = ss[i-1] + 1ll * i*a[i];
}
long long ans = -2e10;
for (int i=m; i<=n; i++) {
long long sum = ss[i]-ss[i-m] - (i-m)*(s[i]-s[i-m]);
ans = max(ans, sum);
}
cout << ans << endl;
return 0;
}
【运行结果】
4 2
5 4 -1 8
15