链接:https://ac.nowcoder.com/acm/contest/11214/D
来源:牛客网
题目描述
小红有一天看到了一只桃子,由于桃子看上去就很好吃,小红很想把它吃掉。
已知吃下桃子后,每天可以获得 aiai 的快乐值,但是每天会获得 bibi 的羞耻度。桃子的持续效果一共为 k 天。
小红想知道,自己在哪一天吃下果实,可以获得尽可能多的快乐值?
如果有多个答案获得的快乐值相等,小红希望获得尽可能少的羞耻度。
如果有多个答案的快乐值和羞耻度都相等,由于小红实在太想吃桃子了,她希望尽可能早的吃下桃子。
输入描述:
第一行有两个正整数 n 和 k,分别代表桃子的有效期总天数,以及桃子效果的持续天数。
(桃子的有效期是指,无论桃子在何时服用,桃子的特殊效果只在这段时间之内有效)
第二行有 n 个正整数 aiai ,分别代表每天可以获得的快乐值。
第三行有 n个正整数 bibi ,分别代表每天可以获得的羞耻度。
1≤k≤n≤1051≤k≤n≤105
1≤ai,bi≤1091≤ai,bi≤109
输出描述:
一个正整数,代表小红是第几天吃下桃子的。
示例1
输入
复制
4 2 3 5 1 7 4 6 5 1
输出
复制
3
说明
选择在第三天吃下桃子,可以获得8快乐值和6羞耻度。
#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;
}