1075. PAT Judge (25)

#include <iostream>
#include <algorithm>
#include <string.h>
#include <vector>

using namespace std;

struct node
{
	int id, score[6], fullmarknum, totalscore, flag;
}stu[100000];

int cmp(node n1, node n2)
{
	if(n1.totalscore != n2.totalscore)
	{
		return n1.totalscore > n2.totalscore;
	}

	if(n1.fullmarknum != n2.fullmarknum)
	{
		return n1.fullmarknum > n2.fullmarknum;
	}

	return n1.id < n2.id;
}

int main()
{
	int n, k, m;
	scanf("%d%d%d", &n, &k, &m);

	int fullmark[6], i;
	for(i = 1; i <= k; i++)
	{
		scanf("%d", &fullmark[i]);
	}

	for(i = 1; i <= n; i++)
	{
		memset(stu[i].score, -2, sizeof(stu[i].score));
		stu[i].fullmarknum = stu[i].totalscore = stu[i].flag = 0;
		stu[i].id = i;
	}

	int index, id, score, curscore;
	for(i = 1; i <= m; i++)
	{
		scanf("%d%d%d", &id, &index, &curscore);

		score = stu[id].score[index];
		if(curscore > score)
		{
			stu[id].score[index] = curscore;
			if(curscore >= 0)
			{
				stu[id].flag = 1;
			}
		}
	}

	int j, sum, count;
	vector<node> v;

	for(i = 1; i <= n; i++)
	{
		if(stu[i].flag == 1)
		{
			sum = count = 0;
			for(j = 1; j <= k; j++)
			{
				curscore = stu[i].score[j];
				if(curscore > 0)
				{
					sum += curscore;
					if(curscore == fullmark[j])
					{
						count++;
					}
				}
			}

			stu[i].fullmarknum = count;
			stu[i].totalscore = sum;

			v.push_back(stu[i]);
		}
	}

	sort(v.begin(), v.end(), cmp);

	int size = v.size(), rank = 1, same = 1;
	for(i = 0; i < size; i++)
	{
		if(i == 0)
		{
		}
		else if(v[i].totalscore == v[i - 1].totalscore)
		{
			same++;
		}
		else
		{
			rank += same;
			same = 1;
		}

		printf("%d %05d %d", rank, v[i].id, v[i].totalscore);

		for(j = 1; j <= k; j++)
		{
			score = v[i].score[j];
			if(score > -2)
			{
				if(score == -1)
				{
					score = 0;
				}

				printf(" %d", score);
			}
			else
			{
				printf(" -");
			}
		}

		printf("\n");
	}

	system("pause");
	return 0;
}

 

posted on 2025-11-23 17:16  王景迁  阅读(3)  评论(0)    收藏  举报

导航