P8830 [传智杯 #3 练习赛] 评委打分 ----- 简单模拟、使用O2以及printf优化时间

题目描述

小 A 参加一个综艺节目。一共有 n(3 \le n \le 10^6)n(3n106) 名评委参与打分(分数范围是 0 到 100 的整数),每个评委依次亮出自己的得分。

为了节目效果,要求从第三个评委开始,每当第 ii 个评委给出打分后,立刻计算出出这个选手在前 ii 名评委的打分中,去掉一个最高分和一个最低分,剩下 i-1i1 个评委的平均分,保留 22 位小数。

输入格式

第一行输入一个整数 nn,表示评委人数。

第二行输出 nn 个整数,表示各个评委的打分。

输出格式

输出共 n-2n2 行,每行表示对应的答案。

输入输出样例

输入 #1
6
11 45 14 19 19 81
输出 #1
14.00
16.50
17.33
24.25
#include <iostream>
#include<iomanip>
#include <math.h>
#include <vector>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include<stdio.h>

using namespace std; 

int main(){
    int n, score1, score2, score;
    int m = 2;
    cin >> n;
    //vector<int> vec;
    cin >> score1;
    //vec.push_back(score1);
    cin >> score2;
    //vec.push_back(score2);
    n -= 2;
    int max_score = max(score1, score2);
    int min_score = min(score1, score2);
    int sum = score1 + score2;
    while (n--) {
        cin >> score;
        m++;
        //vec.push_back(score);
        //int m = vec.size();
        double averge = 0.0;
        max_score = max(max_score, score);
        min_score = min(min_score, score);
        //max_score = *max_element(vec.begin(), vec.end());
        //min_score = *min_element(vec.begin(), vec.end());
        //sum = accumulate(vec.begin(), vec.end(), 0);
        sum += score;
        averge = (sum - double(max_score + min_score)) / (m - 2);
        //cout << fixed << setprecision(2) << averge << endl;
        printf("%.2f\n", averge);
    }
    return 0;
}

 

posted @ 2022-11-23 17:18  slowlydance2me  阅读(122)  评论(0编辑  收藏  举报