結果
問題 | No.447 ゆきこーだーの雨と雪 (2) |
ユーザー |
![]() |
提出日時 | 2017-01-08 01:16:24 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 662 ms / 2,000 ms |
コード長 | 3,244 bytes |
コンパイル時間 | 4,176 ms |
コンパイル使用メモリ | 87,456 KB |
実行使用メモリ | 61,408 KB |
最終ジャッジ日時 | 2024-12-17 17:16:34 |
合計ジャッジ時間 | 18,014 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 |
ソースコード
import java.util.*;import java.math.BigDecimal;public class Rain2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int quizCount = sc.nextInt();Map<String, Quiz> quizMap = new HashMap<String, Quiz>();for (int i = 0; i < quizCount; i++) {Quiz entry = new Quiz();entry.num = i;entry.getName();entry.stars = sc.nextInt();quizMap.put(entry.name, entry);}int submitNum = sc.nextInt();Map<String, Player> playerMap = new HashMap<String, Player>();List<Player> playerList = new ArrayList<Player>();for (int i = 0; i < submitNum; i++) {String playerName = sc.next();String quizName = sc.next();Player player = playerMap.get(playerName);Quiz quiz = quizMap.get(quizName);if (player != null) {player.scores[quiz.num] = calcPoint(quiz.stars, quiz.acCount);quiz.acCount += 1;player.getSum();getRank(playerList, player);} else {Player newPlayer = new Player(quizCount);newPlayer.name = playerName;newPlayer.scores[quiz.num] = calcPoint(quiz.stars, quiz.acCount);quiz.acCount += 1;playerList.add(newPlayer);newPlayer.getSum();playerMap.put(playerName, newPlayer);getRank(playerList, newPlayer);}}showResult(playerList);}private static void showResult(List<Player> playerList) {for (int i = 0; i < playerList.size(); i++) {Player player = playerList.get(i);String point = "";for (int j = 0; j < player.scores.length; j++) {point += player.scores[j] + " ";}System.out.println((i + 1) + " " + player.name + " " + point + player.sum);}}private static void getRank(List<Player> playerList, Player player) {if (playerList.size() > 1){playerList.remove(player);int size = playerList.size();for (int i = 0; i < size; i++) {if (player.sum > playerList.get(i).sum) {playerList.add(i, player);return;}if (i == playerList.size()-1) {playerList.add(i + 1, player);}}}}private static int calcPoint(int stars, int acCount){BigDecimal a = new BigDecimal(stars);BigDecimal b = new BigDecimal(acCount);BigDecimal c = new BigDecimal("0.8");BigDecimal d = new BigDecimal("0.2");BigDecimal e = new BigDecimal(50*stars);return (stars * 50 + e.divide(c.add(d.multiply(b)), 0, BigDecimal.ROUND_FLOOR).intValue());}}class Quiz {public String name;public int stars;public int num;public int acCount = 1;public void getName() {String[] nameArray = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};this.name = nameArray[this.num];}}class Player {public String name;public int[] scores;public int sum;public Player(int quizCount) {scores = new int[quizCount];for (int i = 0; i < quizCount; i++) {scores[i] = 0;}}public void getSum() {int sum = 0;for (int num : scores) {sum += num;}this.sum = sum;}}