P8841 [传智杯 #4 初赛] 竞争得分 ----- 归一化*100

题目描述

为了鼓励大家写出更好的作业,花栗鼠科技大学(Hualishu University of Science and Technology, HUST)的组原实验采用了竞争得分的方式。

具体来说,假设有 nn 个人提交了作业,并且其中原始得分最低的人记作 a_{min}amin ,原始得分最高的人记作 a_{max}amax,第 ii 个人的原始得分为 a_iai,那么第 ii 个人的得分就是:

100 \times \frac{a_i-a_{min}}{a_{max}-a_{min}}100×amaxaminaiamin

由于成绩系统的问题,最终录入的成绩只能是整数,采用直接去掉小数部分的方法。

输入格式

第一行一个整数 nn 表示人数。(1 \leq n \leq 10001n1000)

第二行共nn 个整数,为序列 aa ,其中 a_iai 表示第 ii 个人的原始作业得分。(1 \leq a_i \leq 10001ai1000)

输出格式

一行,共 nn 个整数,表示经过更新后每个人的得分。

输入输出样例

输入 #1
3
1 2 3
输出 #1
0 50 100
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;

int main() {
    int n, a;
    int m;
    cin >> n;
    m = n;
    vector<int> pre_res;
    while (n--) {
        cin >> a;
        pre_res.push_back(a);
    }
    int maxa = *max_element(pre_res.begin(), pre_res.end());
    int mina = *min_element(pre_res.begin(), pre_res.end());
    //cout << maxa << " " << mina;

    if (maxa == mina) {
        cout << 100;
        m--;
        while (m--) {
            cout << " " << 100;
        }
        return 0;
    }
    cout << ((pre_res[0] - mina) * 100 / (maxa - mina));
    for (int i = 1; i < m; ++i) {
        cout << " " << ((pre_res[i] - mina) * 100 / (maxa - mina));
    }
    return 0;
}

 

posted @ 2022-11-20 15:28  slowlydance2me  阅读(59)  评论(0编辑  收藏  举报