結果

問題 No.447 ゆきこーだーの雨と雪 (2)
ユーザー kenji_shioyakenji_shioya
提出日時 2017-01-08 01:16:24
言語 Java21
(openjdk 21)
結果
AC  
実行時間 645 ms / 2,000 ms
コード長 3,244 bytes
コンパイル時間 5,555 ms
コンパイル使用メモリ 82,564 KB
実行使用メモリ 50,568 KB
最終ジャッジ日時 2024-05-09 22:41:42
合計ジャッジ時間 17,345 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 176 ms
43,644 KB
testcase_01 AC 188 ms
43,484 KB
testcase_02 AC 195 ms
43,392 KB
testcase_03 AC 349 ms
48,452 KB
testcase_04 AC 331 ms
48,928 KB
testcase_05 AC 587 ms
49,184 KB
testcase_06 AC 553 ms
49,952 KB
testcase_07 AC 454 ms
48,736 KB
testcase_08 AC 460 ms
50,568 KB
testcase_09 AC 499 ms
49,916 KB
testcase_10 AC 321 ms
46,808 KB
testcase_11 AC 380 ms
49,564 KB
testcase_12 AC 410 ms
48,296 KB
testcase_13 AC 579 ms
48,732 KB
testcase_14 AC 534 ms
49,572 KB
testcase_15 AC 386 ms
48,784 KB
testcase_16 AC 328 ms
46,552 KB
testcase_17 AC 351 ms
48,572 KB
testcase_18 AC 289 ms
46,552 KB
testcase_19 AC 609 ms
49,980 KB
testcase_20 AC 645 ms
49,704 KB
testcase_21 AC 396 ms
48,536 KB
testcase_22 AC 382 ms
48,700 KB
testcase_23 AC 420 ms
48,272 KB
testcase_24 AC 506 ms
50,272 KB
testcase_25 AC 537 ms
49,640 KB
testcase_26 AC 462 ms
49,100 KB
testcase_27 AC 459 ms
49,732 KB
権限があれば一括ダウンロードができます

ソースコード

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