首先,用 `set` 存肯定不是可行的方案。如果有多个评委给出了相同的分数,`set` 会自动去重,仅保留一个。这样,在去除最高分和最低分后,剩余的分数可能不再是原本的 $m-2$ 个评分
其次,写不了那么长(不是
我修改了一下,用的 `vector`,再对每个 `vector` 排序,应该会好一些:
```cpp
#include<bits/stdc++.h>
using namespace std;
vector<vector<int>> scores;
int n, m;
int main() {
scanf("%d%d", &n, &m);
scores.resize(n);
for (int i = 0; i < n; i++) {
scores[i].resize(m);
for (int j = 0; j < m; j++) {
scanf("%d", &scores[i][j]);
}
sort(scores[i].begin(), scores[i].end());
}
double maxAverage = 0;
for (int i = 0; i < n; i++) {
double sum = 0;
for (int j = 1; j < m - 1; j++) {
sum += scores[i][j];
}
double average = sum / (m - 2);
maxAverage = max(maxAverage, average);
}
printf("%.2lf\n", maxAverage);
return 0;
}
```
by Zemu_Ooo @ 2024-01-01 12:41:55
猜你想搜:multiset
by 沉石鱼惊旋 @ 2024-01-01 12:47:56
@[沉石鱼惊旋](/user/516346) @[Zemu_Ooo](/user/467824)
看到了,感谢大佬指正!
by lizeyuhello @ 2024-01-01 13:14:22
# 修改后代码
```cpp
#include<bits/stdc++.h>
using namespace std;
vector<multiset<int> > a;
multiset<int> t;
double ans;
int n, m;
int main()
{
a.push_back(t);
scanf("%d%d", &n, &m);
for (int i = 0, x; i < n; i++)
{
t.clear();
for (int j = 0; j < m; j++)
{
scanf("%d", &x);
t.insert(x);
}
a.push_back(t);
}
for (int i = 1; i <= n; i++)
{
a[i].erase(a[i].begin());
a[i].erase(--a[i].end());
}
double p;
for (int i = 1; i <= n; i++)
{
p = 0;
for (multiset<int>::iterator it = a[i].begin(); it != a[i].end(); it++)
p += *it;
p = p * 1.0 / a[i].size();
ans = max(ans, p);
}
printf("%.2lf", ans);
return 0;
}
```
by lizeyuhello @ 2024-01-01 13:20:36
@[沉石鱼惊旋](/user/516346) @[Zemu_Ooo](/user/467824)
by lizeyuhello @ 2024-01-01 13:21:16