PAT-B 1015. 德才论(同PAT 1062. Talent and Virtue)

1. 在排序的过程中,注意边界的处理(小于、小于等于)

2. 对于B-level,这题是比較麻烦一些了。


源代码:

#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

struct People
{
	int m_id;
	int m_virtue;
	int m_talent;
	People(int id, int virtue, int talent): m_id(id), m_virtue(virtue), m_talent(talent) {}
	void print()
	{
		printf("%08d %d %d\n", m_id, m_virtue, m_talent);
	}
	friend bool operator< (const People& a, const People& b)
	{
		if (a.m_virtue+a.m_talent != b.m_virtue+b.m_talent)
		{
			return a.m_virtue+a.m_talent > b.m_virtue+b.m_talent;
		} else if (a.m_virtue != b.m_virtue)
		{
			return a.m_virtue > b.m_virtue;
		} else 
		{
			return a.m_id < b.m_id;
		}
	}
};

vector<People> sage, noble_man, fool_man, small_man;
int n, l, h;
int id, virtue, talent;

int main()
{
	scanf("%d%d%d", &n, &l, &h);
	for (int i = 0; i < n; ++ i)
	{
		scanf("%d%d%d", &id, &virtue, &talent);
		if (virtue < l || talent < l)
		{
			continue;
		} else if (virtue >= h && talent >= h)
		{
			sage.push_back( People(id, virtue, talent) );
		} else if (virtue  >= h)
		{
			noble_man.push_back( People(id, virtue, talent) );
		} else if (virtue >= talent)
		{
			fool_man.push_back( People(id, virtue, talent) );
		} else
		{
			small_man.push_back( People(id, virtue, talent) );
		}
	}
	
	sort(sage.begin(), sage.end());
	sort(noble_man.begin(), noble_man.end());
	sort(fool_man.begin(), fool_man.end());
	sort(small_man.begin(), small_man.end());

	printf("%d\n", sage.size() + noble_man.size() + fool_man.size() + small_man.size());
	for (size_t i = 0; i < sage.size(); ++ i)
	{
		sage[i].print();
	}
	for (size_t i = 0; i < noble_man.size(); ++ i)
	{
		noble_man[i].print();
	}
	for (size_t i = 0; i < fool_man.size(); ++ i)
	{
		fool_man[i].print();
	}
	for (size_t i = 0; i < small_man.size(); ++ i)
	{
		small_man[i].print();
	}

	return 0;
}


转载于:https://www.cnblogs.com/ldxsuanfa/p/10678854.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值