算法提高 班級排名
時間限制:1.0s 內存限制:256.0MB
問題描述
達達在陶陶的影響下,也對學習慢慢的產生了興趣。
他在每次考試之后,都會追著老師問,自己在班級的總名次是多少。考試一多,老師也不耐煩了,于是他給了達達所有人的成績,讓他自己去算出自己的排名。
可人太多了,達達也無法立即算出來,于是他想讓你幫幫他。
輸入格式
第一行為一個整數N,代表班級的學生總數。
接下來N行,每行一個字符串,代表一個學生的姓名,第一行總是DaDa。
接下來一行一個整數M,代表一共有M次考試。
每次考試有N行,每行有以一個空格分隔的一個正整數S和一個字符串P,代表名字為P的學生在這次考試中得了S分。
輸出格式
一共M行,每行一個整數,代表達達在班級里的排名,排名是這一次考試過后的所有考試總分排名,如果達達和別人并列,達達總是排在前面。
樣例輸入
3
DaDa
A
B
2
49 DaDa
49 A
48 B
80 A
85 B
83 DaDa
【樣例輸出】
1
2
數據規模和約定
N <= 100,名字長度不超過30,分數不超過100
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class 班級排名 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=Integer.parseInt(sc.nextLine());
String[] name=new String[n];
for (int i = 0; i < n; i++) {
name[i]=sc.nextLine();
}
int m=Integer.parseInt(sc.nextLine());
int[] score=new int[n];
int[] score1=new int[n];
int[] p=new int[m];
int DaDaScore=0;
Map map=new HashMap();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
String[] ss=sc.nextLine().split(" ");
if(map.get(ss[1])!=null){
score[j]=map.get(ss[1])+Integer.parseInt(ss[0]);
map.put(ss[1], score[j]);
}
else{
score[j]=Integer.parseInt(ss[0]);
map.put(ss[1], score[j]);
}
score1[j]=score[j];
if(ss[1].equals("DaDa")){
DaDaScore=score[j];
}
}
Arrays.sort(score1);
for (int j = score1.length-1; j >=0; j--) {
if(score1[j]==DaDaScore){
p[i]=n-j;
break;
}
}
}
for (int i = 0; i < p.length; i++) {
System.out.println(p[i]);
}
}
}