站外题求助,玄关
  • 板块灌水区
  • 楼主fulichang
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/2/27 17:10
  • 上次更新2024/2/27 19:48:19
查看原帖
站外题求助,玄关
762199
fulichang楼主2024/2/27 17:10

题目要求:

有n个人,m个奖项,k个课程,以平均分为第一关键字(大),方差为第二关键字(小),序号为第三关键字(小),平均分和方差向下取整。输出前m个人的序号,用空格隔开

输入格式:

第一行输入n,m,k

接下来n行,第i行输入k个数,表示序号为i的学生k门课程的成绩xi

约束:

n≤1000,m≤60,k≤10,xi≤100

代码如下

#include <bits/stdc++.h>
 
using std::cin, std::cout, std::endl;
 
const int N = 1e3 + 10;
 
struct node {
    int avg, var, num;
    friend bool operator < (node a, node b) {
        return a.avg != b.avg ? a.avg > b.avg : a.var != b.var ? a.var < b.var : a.num < b.num;
    }
};
 
int n, m, k;
node a[N];
 
int main (void) {
    std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin >> n >> m >> k;
    for (int i = 1; i <= n; i++) {
        int sum = 0, x, sp = 0, t;
        for (int j = 1; j <= k; j++)
            cin >> x, sum += x, sp += x * x;
        a[i].avg = (int)(sum * 1.0 / k), a[i].var = (int)((sp - sum * (sum * 1.0 / k) ) / k), a[i].num = i;
    }
    std::sort (a + 1, a + n + 1);
    for (int i = 1; i <= m; i++)
        cout << a[i].num << ' ';
    return 0;
}
2024/2/27 17:10
加载中...