1025. PAT Ranking (25)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct node
{
	long long registration_number;
	int score, location_number, local_rank;
};

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

	return n1.registration_number < n2.registration_number;
}

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

	int i, m, j, same, rank;
	vector<node> v, res;
	node nod;

	for(i = 1; i <= n; i++)
	{
		scanf("%d", &m);

		v.clear();
		for(j = 1; j <= m; j++)
		{
			scanf("%lld%d", &nod.registration_number, &nod.score);

			nod.location_number = i;
			v.push_back(nod);
		}

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

		same = rank = 1;
		for(j = 0; j <= m - 1; j++)
		{
			if(j == 0)
			{
			}
			else if(v[j].score == v[j - 1].score)
			{
				same++;
			}
			else 
			{
				rank += same;
				same = 1;
			}

			v[j].local_rank = rank;
		}

		res.insert(res.end(), v.begin(), v.end());
	}

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

	int size = res.size();
	printf("%d\n", size);

	same = rank = 1;
	for(i = 0; i <= size - 1; i++)
	{
		if(i == 0)
		{
		}
		else if(res[i].score == res[i - 1].score)
		{
			same++;
		}
		else 
		{
			rank += same;
			same = 1;
		}

		nod = res[i];
		printf("%013lld %d %d %d\n", nod.registration_number, rank, nod.location_number, nod.local_rank);
	}

	system("pause");
	return 0;
}

 

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

导航