1062. Talent and Virtue (25)

来源:互联网 发布:js方法参数为对象 编辑:程序博客网 时间:2024/06/08 12:09

    考虑自定义比较

#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;}


0 0
原创粉丝点击