本文主要是介绍1062. Talent and Virtue 解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
分组排序:
vg,tg >= L 的才进入排序
vg.tg >= H的圣人
tg<H vg>=H的君子
tg<H,vg<H,vg>=vt的小人
剩下的君子。
然后再内部排序按总成绩,vg,id的顺序进行排序。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <string>
#include <map>
#include <stack>
#include <queue>
#include <set>using namespace std;
int n,l,h;
struct node{int id;int vg;int tg;int total;int r;
};
vector <node> ans;bool cmp(node n1,node n2){if(n1.r != n2.r)return n1.r < n2.r;else if(n1.total != n2.total)return n1.total > n2.total;else if(n1.vg != n2.vg)return n1.vg > n2.vg;elsereturn n1.id < n2.id;
}int main(){scanf("%d%d%d",&n,&l,&h);node t;for(int i =0 ;i < n ;i++){scanf("%d%d%d",&t.id,&t.vg,&t.tg);if(t.tg >= l && t.vg >= l){t.total = t.tg + t.vg;//判定开始if(t.tg >= h && t.vg >= h)t.r = 1;else if(t.tg <h && t.vg >= h)t.r = 2;else if(t.tg < h && t.vg < h && t.vg >= t.tg)\t.r = 3;elset.r = 4;ans.push_back(t);}}sort(ans.begin(),ans.end(),cmp);printf("%d\n",ans.size());for(int i = 0 ;i < ans.size();i++)printf("%d %d %d\n",ans[i].id,ans[i].vg,ans[i].tg);return 0;
}
这篇关于1062. Talent and Virtue 解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!