题目1014:排名
思路:
1 开始使用HashMap方式,时间各种超,直接建立私有类
2 用BufferedReader 代替 Scanner 加快输入速度
3 最终AC
1014 | Accepted | 133880KB | 3787B | 1840MS |
参考代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
private static class Student implements Comparable<Student> {
String id;
int mark;
public Student(String id, int mark) {
this.id = id;
this.mark = mark;
}
public String toString() {
return (this.id + " " + this.mark);
}
@Override
public int compareTo(Student s1) {
if (s1.mark != this.mark)
return (s1.mark - this.mark);
else
return (this.id.compareTo(s1.id));
}
}
public static void main(String arg[]) throws IOException{
//Scanner sc = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//while(sc.hasNext()){
while(true){
//Integer numofstu = sc.nextInt();
//if(numofstu ==0 ) break;
//Integer numofproblem = sc.nextInt();
//Integer scoreline = sc.nextInt();
String s = br.readLine();
//System.out.println(s);
if(s==null) break;
String[] tempNum = s.split(" ");
Integer numofstu=Integer.parseInt(tempNum[0]);
if(numofstu ==0) break;
Integer numofproblem=Integer.parseInt(tempNum[1]);
Integer scoreline=Integer.parseInt(tempNum[2]);
List<Integer> list1 = new ArrayList<Integer>();
//接收每题分数
s=br.readLine();
tempNum = s.split(" ");
for(int i=0;i<tempNum.length;i++){
list1.add(new Integer(tempNum[i]));
//list1.add(sc.nextInt));
}
//接收回车
//String temp = sc.nextLine();
//接收学生资料
//Map<String, Integer> map1 = new HashMap<String, Integer>();
List<Student> students = new ArrayList<Student>();
for(int i=0;i<numofstu;i++){
Integer score = 0;
//String str = sc.nextLine();
String str=br.readLine();
String[] str1 = str.split(" ");
for(int j=2;j<str1.length;j++){
Integer num = Integer.parseInt(str1[j]);
score += list1.get(num-1);
}
//map1.put(str1[0],score);
if(score>=scoreline) students.add(new Student(str1[0], score));
}
System.out.println(students.size());
Collections.sort(students);
for(Student i :students){
System.out.println(i.toString());
}
students.clear();
/* //System.out.println(map1);
//排序
List<Map.Entry<String, Integer>> ScoreList =new ArrayList<Map.Entry<String, Integer>>(map1.entrySet());
Collections.sort(ScoreList, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
Integer x = o2.getValue() - o1.getValue();
if(x==0) return (o1.getKey()).toString().compareTo(o2.getKey());
else return x;
// return (o1.getKey()).toString().compareTo(o2.getKey());
}
});
//选择输出
Integer count = 0;//人数标志;
for(int i=0;i<ScoreList.size();i++){
if(ScoreList.get(i).getValue()>= scoreline)
{
count++;
}
else break;
}
System.out.println(count);
for(int i=0;i<count;i++){
if(ScoreList.get(i).getValue()>= scoreline)
{
System.out.println(ScoreList.get(i).toString().replace("=", " "));
}
else break;
}*/
}
}
}