結果

問題 No.447 ゆきこーだーの雨と雪 (2)
ユーザー kenji_shioya
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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;
   }
 }
0