您的位置:首页 > 产品设计 > UI/UE

1062. Talent and Virtue (25)

2016-02-26 16:47 429 查看
    考虑自定义比较

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ PAT Talent and Virtue