A1062 Talent and Virtue [排序]

在这里插入图片描述
————————————————

  1. 难在自定义比较函数那吧,要把关系理清楚,其他还好。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct kaosheng
{
	char id[15];
	int defen;
	int caifen;
	int sum;
	int flag;
}kao[100001];
bool cmp(kaosheng a, kaosheng b)
{
	if (a.flag != b.flag)
		return a.flag < b.flag;
	else if (a.sum != b.sum)
		return a.sum > b.sum;
	else if (a.defen != b.defen)
		return a.defen > b.defen;
	else
		return strcmp(a.id, b.id) < 0;
}
int main()
{
	int n, low, high; int countjige = 0;
	cin >>n>> low >> high;
	for (int i = 0; i < n; i++)
	{
		cin >> kao[i].id >> kao[i].defen >> kao[i].caifen;
		kao[i].sum = kao[i].defen + kao[i].caifen;
		if (kao[i].caifen >= high && kao[i].defen >= high)
		{
			kao[i].flag = 1;
			countjige++;
		}
		else if (kao[i].caifen < high && kao[i].caifen >= low && kao[i].defen >= high)
		{
			kao[i].flag = 2;
			countjige++;
		}
		else if (kao[i].caifen < high && kao[i].caifen >= low && kao[i].defen < high && kao[i].defen >= low && kao[i].defen >= kao[i].caifen)
		{
			kao[i].flag = 3;
			countjige++;
		}
		else if ( kao[i].caifen >= low  && kao[i].defen >= low )
		{
			kao[i].flag = 4;
			countjige++;
		}
		else
			kao[i].flag = 5;
	}
	sort(kao, kao + n, cmp);
	cout << countjige << endl;
	for (int i = 0; i <countjige; i++)
	{
		cout << kao[i].id << " " << kao[i].defen << " " << kao[i].caifen << endl;
	}

}
posted @ 2020-06-30 20:32  _Hsiung  阅读(43)  评论(0编辑  收藏  举报