题目要求:
有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;
}