#998. CSP 2020 第一轮(初赛)模拟 第 40 题

CSP 2020 第一轮(初赛)模拟 第 40 题

(烧作业)某课作业布置了 N(3N100000)N(3\leq N\leq 100000) 个题目,第 ii 题对应的得分是 aia_i。作业的总得分的计算方式为去掉作业中得分最小的一个题,剩下其它所有题目得分的平均值。但很不幸小 A 遇到了一场火灾,前 K(1KN2)K(1\leq K\leq N-2) 个题目被烧了,无法记录得分。小 A 想知道,KK 是多少时,可以得到最高的作业得分? 作业被烧了前 KK 页,这时的得分是从第 K+1K+1 页到最后一页中,去除最小得分后取平均值。

输入第一行是整数 NN,第二行是 nn 个不超过 1000010000 的非负整数表示 aia_i

输出一行,若干个整数表示答案。如果有多个 KK,请依次升序输出。

#include <cstdio>
#include <cmath>
#define min(a,b) (a<b?a:b)
#define MAXN 100002
using namespace std;
int n, k[MAXN], cnt = 0;
int s[MAXN], minScore, sum;
double maxAverage = 0, nowAverage;
int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        scanf("%d", &s[i]);
    minScore = s[n];
    ①;
    for(int i = n - 1; i >= 2; i--) {
        minScore = min(minScore, s[i]);
        ②;
        nowAverage = ③;
        if(nowAverage > maxAverage) {
            ④
            maxAverage = nowAverage;
        } else if(fabs(nowAverage - maxAverage) < 1e-6)
            ⑤;
    }
    for(int i = cnt; i >= 1; i--)
        printf("%d\n", k[i]);
    return 0;
}
 

②处应填( )

{{ select(1) }}

  • sum=maxAverage*(n-i)
  • sum+=s[i]
  • sum+=s[n-i]
  • sum=s[i]+minScore