PAT(BasicLevel):德才论 (25)
来源:互联网 发布:apache tika使用说明 编辑:程序博客网 时间:2024/06/11 15:06
宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之
小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”
现给出一批考生的德才分数,请根据司马光的理论给出录取排名。
小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”
现给出一批考生的德才分数,请根据司马光的理论给出录取排名。
输入描述:
输入第1行给出3个正整数,分别为:N(<=105),即考生总数;L(>=60),为录取最低分数线,即德分和才分均不低于L的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线L的考生也按总分排序,但排在第三类考生之后。随后N行,每行给出一位考生的信息,包括:准考证号、德分、才分,其中准考证号为8位整数,德才分为区间[0, 100]内的整数。数字间以空格分隔。
输出描述:
输出第1行首先给出达到最低分数线的考生人数M,随后M行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。
输入例子:
14 60 8010000001 64 9010000002 90 6010000011 85 8010000003 85 8010000004 80 8510000005 82 7710000006 83 7610000007 90 7810000008 75 7910000009 59 9010000010 88 4510000012 80 10010000013 90 9910000014 66 60
输出例子:
1210000013 90 9910000012 80 10010000003 85 8010000011 85 8010000004 80 8510000007 90 7810000006 83 7610000005 82 7710000002 90 6010000014 66 6010000008 75 7910000001 64 90
import java.util.Scanner;import java.util.TreeSet;/** * **PAT:德才论 * *1.利用BST保存有序数据集,直接输出免排序。 * *2.如果要进行对集合、数组的排序,最好采用qSort,否则会超时 * @author 编程只服JAVA * */public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int L = sc.nextInt(); int H = sc.nextInt(); /* * TreeSet:底层数据结构是二叉树。 * 可以根据自然排序,或者比较器排序(创建 set 时提供的 Comparator 进行排序)对集合中的元素进行排序。 * 具体使用,参照构造方法。 * * 无参构造: * TreeSet() 构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。 * * 注意:通过这个例子说明了TreeSet集合是:有序(按照某种规则排序),唯一。 * 自定义的对象必须重写Comparable接口的方法 进行比较 (以及比较的优先级或者比较的次要条件 * 重写完自然排序接口后,我们发现一个规律: * 如果返回值是0,说明元素重复。只存储第一个。 * 如果返回值大于0,正向存储。 * 如果返回值小于0,逆向存储。 */ TreeSet<Stu> both = new TreeSet<Stu>(); TreeSet<Stu> dc1 = new TreeSet<Stu>(); TreeSet<Stu> dc2 = new TreeSet<Stu>(); TreeSet<Stu> dc3 = new TreeSet<Stu>(); while(n != 0){ Stu stu = new Stu(sc.nextInt(), sc.nextInt(), sc.nextInt()); if(stu.d < L || stu.c <L){ n--; continue; } if(stu.d >= H && stu.c >= H) both.add(stu); else if(stu.d >= H) dc1.add(stu); else if(stu.d >= stu.c) dc2.add(stu); else dc3.add(stu); n--; } System.out.println(both.size()+dc1.size()+dc2.size()+dc3.size()); print(both); print(dc1); print(dc2); print(dc3); sc.close(); } private static void print(TreeSet<Stu> set) { for(Stu s : set) System.out.println(s.id + " " + s.d + " " + s.c); } static class Stu implements Comparable<Stu>{ int id, d, c, sum; public Stu(int id, int d, int c) { this.id = id; this.d = d; this.c = c; this.sum = d+c; } public int compareTo(Stu o) {// if(this.sum != o.sum)// return o.sum-this.sum;// if(this.d != o.d)// return o.d-this.d;// return this.id-o.id; if(this.sum == o.sum){ if(this.d == o.d){ return this.id-o.id; }else { return o.d-this.d;} } return o.sum-this.sum; } } }
0 0
- PAT(BasicLevel):德才论 (25)
- PAT 1015. 德才论 (25)
- PAT 1015. 德才论 (25)
- PAT乙级 德才论 (25)
- PAT-1015. 德才论 (25)
- PAT-1015. 德才论 (25)
- PAT 1015. 德才论 (25)
- 1015. 德才论 (25) PAT
- [PAT] 1015. 德才论 (25)
- PAT --- 1015. 德才论 (25)
- PAT-1005.德才论(25)
- 编程题目: PAT 1015. 德才论 (25)
- PAT Basic 1015. 德才论 (25)
- 【PAT】1015. 德才论 (25) basic
- PAT(B)1015. 德才论 (25)
- PAT(BASIC)1015. 德才论 (25)
- 【PAT】Basic 1015 :德才论(25)
- PAT(Basic Level) 1015 德才论 (25)
- 学习C#中toString()和Convert.toString()的用法区别
- Combinations
- [BZOJ2006][NOI2010]超级钢琴(st表+heap)
- python 学习。。。
- android使用json数据格式同时上传图片和文本
- PAT(BasicLevel):德才论 (25)
- JQuery中Ajax的操作
- PHP list的使用
- nyoj 素数距离问题
- 总结一些分页查询的方法SQL server,MySQL,oracle数据库及hibernate中
- 冒泡排序
- 选择排序
- 执行命令行说明
- 选择排序2