ZOJ-1283

又是一道英语阅读模拟,规则读的半死。。蛋疼

#include<cstdio>
#include<vector>
#include<algorithm>
#include<cmath>
#include<deque>

using namespace std;

namespace
{
	struct Student
	{
		deque<int> q;
		int bonus, abs;
		double avg, adjAvg;
		int grade;
	};

	void grade(Student *s, double mean, double sd)
	{
		if (s->adjAvg >= mean + sd)
			s->grade = 4;
		else if (s->adjAvg >= mean)
			s->grade = 3;
		else if (s->adjAvg >= (mean - sd))
			s->grade = 2;
		else
			s->grade = 1;
	}

	void adj_grade(Student *s)
	{
		s->grade -= s->abs / 4;
		if (s->grade < 0)
			s->grade = 0;
		if (s->abs == 0 && s->grade < 4)
			s->grade++;
	}
}

int main()
{
	puts("MAKING THE GRADE OUTPUT");
	int N, S, T;
	scanf("%d", &N);
	vector<Student *> V;
	while (N--)
	{
		scanf("%d %d", &S, &T);
		V.clear();
		double total = 0;
		for (int i = 0; i < S; i++)
		{
			Student *stu = new Student();
			int score, sum = 0;
			for (int j = 0; j < T; j++)
			{
				scanf("%d", &score);
				stu->q.push_back(score);
				sum += score;
			}
			if (T > 2)
			{
				sort(stu->q.begin(), stu->q.end());
				sum -= stu->q.front();
				stu->q.pop_front();
			}
			stu->avg = sum * 1.0 / stu->q.size();
			total += stu->avg;
			scanf("%d %d", &(stu->bonus), &(stu->abs));
			stu->adjAvg = stu->avg + (stu->bonus) / 2 * 3;
			V.push_back(stu);
		}
		double mean = total / S;
		total = 0;
		for (size_t i = 0; i < V.size(); i++)
			total += (V[i]->avg - mean) * (V[i]->avg - mean);
		double sd = sqrt(total / S);
		if (sd < 1)
			sd = 1;

		double res = 0;
		for (size_t i = 0; i < V.size(); i++)
		{
			grade(V[i], mean, sd);
			adj_grade(V[i]);
			res += V[i]->grade;
		}
		printf("%.1lf\n", res / V.size());
	}
	puts("END OF OUTPUT");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值