1062. Talent and Virtue (25)

本文探讨了如何根据特定规则自定义比较函数,并利用该函数对数据进行排序。通过实现一个自定义比较函数,我们可以根据人才(talent)和美德(virtue)的综合评价来对个体进行排序。此外,文章还介绍了如何处理不同评价标准下的排序逻辑,包括考虑总分、美德分数以及ID等多维度因素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    考虑自定义比较

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

using namespace std;

struct man{
	int id, talent, virtue;

	man(int i, int t, int v) : id(i), talent(t), virtue(v){}
};

int n, l, h;

int level(man m){
	if(m.talent >= h && m.virtue >= h) return 4;
	else if(m.talent < h && m.virtue >= h) return 3;
	else if(m.talent < h && m.virtue < h && m.virtue >= m.talent) return 2;
	else return 1;
}

bool cmp(const man& m1, const man& m2){
	int l1 = level(m1), l2 = level(m2);
	int sum1 = m1.talent + m1.virtue, sum2 = m2.talent + m2.virtue;

	return l1 > l2 || (l1 == l2 && sum1 > sum2)
		|| (l1 == l2 && sum1 == sum2 && m1.virtue > m2.virtue)
		|| (l1 == l2 && sum1 == sum2 && m1.virtue == m2.virtue && m1.id < m2.id);
}


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

	vector<man> men;
	for(int i = 0; i < n; ++i){
		int id, talent, virtue;
		scanf("%d%d%d", &id, &virtue, &talent);

		if(talent >= l && virtue >= l){
			men.emplace_back(id, talent, virtue);
		}
	}

	sort(begin(men), end(men), cmp);
	printf("%d\n", (int)men.size());
	for(auto& m : men){
		printf("%08d %d %d\n", m.id, m.virtue, m.talent);
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值