D.
看到数据范围 ,遍历一遍是没有问题的。
这启发我们枚举吃桃子的日子是哪一天。
对于 数组和
数组,可以采用前缀和,在判断该天是否吃桃子时起到
计算的帮助。
时间复杂度 。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 111111;
const int inf = 1e10;
int a[N], b[N], n, k;
ll preA[N], preB[N];
int main() {
scanf ("%d%d", &n, &k);
for (int i = 1; i <= n; i ++) {
scanf ("%d", &a[i]);
}
for (int i = 1; i <= n; i ++) {
scanf ("%d", &b[i]);
}
preA[0] = 0, preB[0]= 0;
for (int i = 1; i <= n; i ++) {
preA[i] = preA[i - 1] + a[i];
preB[i] = preB[i - 1] + b[i];
}
//for (int i = 1; i <= n; i ++) {
// cout << "preA[" << i << "]:" << preA[i] << " ";
// cout << "preB[" << i << "]:" << preB[i] << endl;
//}
ll mxA = -inf, mnB = inf;
int id = 0;
for (int i = 1; i <= n - k + 1; i ++) {
ll tpA = preA[i + k - 1] - preA[i - 1];
ll tpB = preB[i + k - 1] - preB[i - 1];
//cout << "mnB:" << mnB << " " << "tpB:" << tpB << endl;
if (tpA > mxA) {
id = i;
mxA = tpA;
mnB = tpB;
}
else if (tpA == mxA) {
if (tpB < mnB) {
id = i;
mxA = tpA;
mnB = tpB;
}
}
}
//cout << mxA << " " << mnB;
//cout << "mnB:" << mnB;
printf ("%d", id);
return 0;
}
京公网安备 11010502036488号