結果

問題 No.9 モンスターのレベル上げ
ユーザー htensai
提出日時 2020-01-15 10:07:05
言語 Java11
(openjdk 11.0.5)
結果
AC  
実行時間 1,112 ms
コード長 1,877 Byte
コンパイル時間 2,388 ms
使用メモリ 38,680 KB
最終ジャッジ日時 2020-01-15 10:07:19

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
01.txt AC 128 ms
34,144 KB
02.txt AC 128 ms
33,920 KB
03.txt AC 792 ms
38,568 KB
04.txt AC 528 ms
38,620 KB
05.txt AC 456 ms
38,564 KB
06.txt AC 364 ms
38,676 KB
07.txt AC 240 ms
38,408 KB
08.txt AC 144 ms
34,480 KB
09.txt AC 272 ms
38,436 KB
10.txt AC 724 ms
38,476 KB
99_system_test1.txt AC 124 ms
33,988 KB
challenge01.txt AC 1,020 ms
38,288 KB
challenge02.txt AC 1,112 ms
38,676 KB
challenge03.txt AC 792 ms
38,484 KB
system_test1.txt AC 740 ms
38,236 KB
system_test2.txt AC 740 ms
38,680 KB
system_test3.txt AC 184 ms
35,872 KB
system_test4.txt AC 544 ms
38,492 KB
system_test5.txt AC 480 ms
38,288 KB
system_test6.txt AC 172 ms
35,248 KB
テストケース一括ダウンロード

ソースコード

diff #
import java.util.*;
import java.math.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        int[] enemies = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        for (int i = 0; i < n; i++) {
            enemies[i] = sc.nextInt();
        }
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < n; i++) {
            Team team = new Team(arr);
            int max = 0;
            for (int j = 0; j < n && max <= min; j++) {
                int x = enemies[(i + j) % n];
                Member m = team.getMember();
                m.add(x / 2);
                max = Math.max(max, m.count);
                team.add(m);
            }
            min = Math.min(min, max);
        }
        System.out.println(min);
    }
    
    static class Team {
        PriorityQueue<Member> queue = new PriorityQueue<>();
        
        public Team (int[] arr) {
            for (int x : arr) {
                queue.add(new Member(x));
            }
        }
        
        public Member getMember() {
            return queue.poll();
        }
        
        public void add(Member m) {
            queue.add(m);
        }
    }
    
    static class Member implements Comparable<Member> {
        int level;
        int count;
        
        public Member(int level) {
            this.level = level;
            this.count = 0;
        }
        
        public void add(int added) {
            level += added;
            count++;
        }
        
        public int compareTo(Member another) {
            if (level == another.level) {
                return count - another.count;
            } else {
                return level - another.level;
            }
        }
    }
}
0