本地能过结果平台上全都紫了?
查看原帖
本地能过结果平台上全都紫了?
855093
0x00AC3375楼主2023/7/23 21:56

就是按照常规方法造一个结构体数组嵌套一个int数组来做,平台报的Aborted / IOT trap.

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
struct student {
	string name;
	int score[21];
	double average;
	double variance;
};
int n, m;
student stulist[100002];

int cmp(const void* cp1, const void* cp2)
{
	//比较方差
	student* p1 = (student*)cp1;
	student* p2 = (student*)cp2;
	if (p1->variance > p2->variance) return -1;
	//两个人方差的差值效果1e-5就视为相等
	else if (fabs(p1->variance - p2->variance) < 1e-5) return p1->name < p2->name ? -1 : 1;
	else return 1;
}

int main()
{
	scanf("%d%d", &n, &m);
	for (int i = 0; i <= n - 1; i += 1)
	{
		//输入姓名
		cin >> stulist[i].name;
		stulist[i].average = 0.0, stulist[i].variance = 0.0;
		for (int j = 0; j <= m - 1; j += 1)
		{
			//一边输入分数一边计入平均分
			scanf("%d", &stulist[i].score[j]);
			stulist[i].average += 1. * stulist[i].score[j] / m;
		}
		//计算方差
		for (int j = 0; j <= m - 1; j += 1) stulist[i].variance += 1. * pow(stulist[i].score[j] - stulist[i].average, 2.) / m;
	}
	//排序
	qsort(stulist, n, sizeof(student), cmp);
	for (int i = 0; i <= min(n, 20) - 1; i += 1) cout << stulist[i].name << endl;
}
2023/7/23 21:56
加载中...