11250: 【原1250】BestSubsequence
题目
题目描述
author: yixi 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/1250
Description
LL有n个妹子,他给妹子们编号排成一排。据说今天天气大好,LL要去春游了,他决定要选定至少F个妹子一起去玩。 为了让妹子们开心,他决定选连续一段的妹子们。然后LL有个特殊的癖好,他喜欢体重比较厉害一些的妹子。
那你可以帮LL选妹子吗,使得选出来的这些妹子的平均体重最大。
Input Format
输入第一行两个整数,n和F。
接下来n行,每行一个整数,表示妹子的体重。
对前50%的数据:1<=n<=20。 对100%的数据:1<=n<=100000, 1<=F<=n, 1<=妹子体重<=2000。
Output Format
输出一个整数,为这个平均值乘以1000,不要四舍五入,输出int(avergae * 1000)即可。
Sample Input
10 6
6
4
2
10
3
8
5
9
4
1
Sample Output
6500
yyong119's solution
#include <cstdio>
#define MAX_N 100010
using namespace std;
long long a[MAX_N], sum[MAX_N];
int N, F;
int main() {
scanf("%d%d", &N, &F);
for (int i = 1; i <= N; i++) {
scanf("%lld", &(a[i]));
sum[i] = sum[i - 1] + a[i];
}
double res = -1;
for (int j = 0, i = 0; i + F <= N; i++) {
if (i > j && ((sum[i] - sum[j]) * (i + F - j) < (sum[i + F] - sum[j]) * (i - j)))
j = i;
if (res * (i - j + F) < sum[i + F] - sum[j])
res = (double)(sum[i + F] - sum[j]) / (i - j + F);
}
printf("%d\n", (int)(1000 * res));
return 0;
}