题解:P11950 [科大国创杯初中组 2023] 评分

思路

模拟题。

每次读入时先累计分数并统计最大和最小分值,读入完后减去后最大和最小分值后再取平均数。

最后排完序并输出即可。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
int n, m, ma = -1, mi = 105, sum, t;
struct STRUCT
{
double s;
int id;
} a[105];
bool cmp(STRUCT x, STRUCT y)
{
if (x.s != y.s)
return x.s > y.s;
return x.id < y.id;
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
ma = -1, mi = 105, sum = 0;
for (int j = 1; j <= m; j++)
{
cin >> t;
sum += t;
ma = max(ma, t);
mi = min(mi, t);
}
sum = sum - ma - mi;
a[i].s = 1.0 * sum / (m - 2);
a[i].id = i;
}
sort(a + 1, a + n + 1, cmp);
for (int i = 1; i <= n; i++)
cout << a[i].id << " ";
return 0;
}