1062. Talent and Virtue (25)

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

using namespace std;

struct node
{
	int ID_Number, Virtue_Grade, Talent_Grade, total;
};

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

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

	return n1.ID_Number < n2.ID_Number;
}

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

	vector<node> v[4];
	int i;
	node nod;
	
	for(i = 1; i <= n; i++)
	{
		scanf("%d%d%d", &nod.ID_Number, &nod.Virtue_Grade, &nod.Talent_Grade);
		nod.total = nod.Virtue_Grade + nod.Talent_Grade;

		if(nod.Talent_Grade >= l && nod.Virtue_Grade >= l)
		{
			if(nod.Virtue_Grade >= h && nod.Talent_Grade >= h)
			{
				v[0].push_back(nod);
			}
			else if(nod.Talent_Grade < h && nod.Virtue_Grade >= h)
			{
				v[1].push_back(nod);
			}
			else if(nod.Talent_Grade < h && nod.Virtue_Grade < h && nod.Virtue_Grade >= nod.Talent_Grade)
			{
				v[2].push_back(nod);
			}
			else
			{
				v[3].push_back(nod);
			}
		}
	}

	int count = 0, size[4];
	for(i = 0; i < 4; i++)
	{
		size[i] = v[i].size();
		count += size[i];

		if(size[i] > 0)
		{
			sort(v[i].begin(), v[i].end(), cmp);
		}
	}

	printf("%d\n", count);

	int j;
	for(i = 0; i < 4; i++)
	{
		for(j = 0; j < size[i]; j++)
		{
			nod = v[i][j];
			printf("%08d %d %d\n", nod.ID_Number, nod.Virtue_Grade, nod.Talent_Grade);
		}
	}

	system("pause");
	return 0;
}

 

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

导航