对象的比较排序

来源:互联网 发布:一维数组的定义方式 编辑:程序博客网 时间:2024/06/03 18:56

点击打开链接


排名

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23812    Accepted Submission(s): 8735


Problem Description
今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 
每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的 
考生,并将他们的成绩按降序打印。 
 

Input
测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N 
< 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一 
名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号 
(题目号由1到M)。 
当读入的考生人数为0时,输入结束,该场考试不予处理。 
 

Output
对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高 
到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考 
号的升序输出。 
 

Sample Input
4 5 2510 10 12 13 15CS004 3 5 1 3CS003 5 2 4 1 3 5CS002 2 1 2CS001 3 2 3 51 2 4010 30CS001 1 22 3 2010 10 10CS000000000000000001 0CS000000000000000002 2 1 20
 

Sample Output
3CS003 60CS001 37CS004 3701CS000000000000000002 20
import java.util.*;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.Map;import java.util.Scanner;import java.util.StringTokenizer;import java.util.TreeMap;public class Main {public static void main(String[] args){new Task().solve();}}class Task{InputReader in = new InputReader(System.in) ;      PrintWriter out = new PrintWriter(System.out) ;  void solve(){while(true){int N = in.nextInt() ;if(N == 0){break; }int M = in.nextInt() ;int G = in.nextInt() ;int []arr = new int[M] ;for(int i = 0 ; i< M ; i++){arr[i] = in.nextInt() ;}List<Student> list = new ArrayList<Student>() ;while(N-- > 0){String s = in.next() ;int m = in.nextInt() ;int sum = 0 ;for(int i = 0 ; i< m ; i++){sum += arr[in.nextInt()-1] ;}if(sum >= G){list.add(new Student(s , sum) ) ;}}Collections.sort(list);out.println(list.size());for(Student s : list){out.println(s.ID + " " + s.score);}//out.flush();}out.flush();}    class Student implements Comparable<Student>{    String ID ;    int score ;     Student(String ID , int score){    this.ID = ID ;    this.score = score ;    }    @Override    public int compareTo(Student other){    if(this.score != other.score){    return (other.score - this.score) ;    }else{    return this.ID.compareTo(other.ID) ;    }    }   }}class InputReader {      public BufferedReader reader;      public StringTokenizer tokenizer;        public InputReader(InputStream stream) {          reader = new BufferedReader(new InputStreamReader(stream), 32768);          tokenizer = new StringTokenizer("");      }        private void eat(String s) {          tokenizer = new StringTokenizer(s);      }        public String nextLine() {          try {              return reader.readLine();          } catch (Exception e) {              return null;          }      }        public boolean hasNext() {          while (!tokenizer.hasMoreTokens()) {              String s = nextLine();              if (s == null)                  return false;              eat(s);          }          return true;      }        public String next() {          hasNext();          return tokenizer.nextToken();      }        public int nextInt() {          return Integer.parseInt(next());      }        public long nextLong() {          return Long.parseLong(next());      }        public double nextDouble() {          return Double.parseDouble(next());      }        public BigInteger nextBigInteger() {          return new BigInteger(next());      }    }