結果
問題 | No.43 野球の試合 |
ユーザー | neko_the_shadow |
提出日時 | 2019-02-24 16:51:57 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 547 ms / 5,000 ms |
コード長 | 2,721 bytes |
コンパイル時間 | 2,617 ms |
コンパイル使用メモリ | 85,472 KB |
実行使用メモリ | 61,040 KB |
最終ジャッジ日時 | 2024-06-02 10:01:26 |
合計ジャッジ時間 | 5,500 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 143 ms
41,968 KB |
testcase_01 | AC | 132 ms
40,640 KB |
testcase_02 | AC | 142 ms
41,416 KB |
testcase_03 | AC | 144 ms
41,800 KB |
testcase_04 | AC | 147 ms
41,792 KB |
testcase_05 | AC | 132 ms
40,568 KB |
testcase_06 | AC | 177 ms
42,496 KB |
testcase_07 | AC | 547 ms
61,040 KB |
testcase_08 | AC | 149 ms
41,788 KB |
testcase_09 | AC | 143 ms
40,808 KB |
testcase_10 | AC | 144 ms
41,696 KB |
ソースコード
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Map.Entry; import java.util.OptionalInt; import java.util.Scanner; import java.util.stream.Collectors; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { Scanner stdin = new Scanner(System.in); int n = Integer.parseInt(stdin.nextLine()); char[] s = new char[n * n]; for (int i = 0; i < n; i++) { String t = stdin.nextLine(); for (int j = 0; j < n; j++) s[i * n + j] = t.charAt(j); } List<Integer> games = new ArrayList<>(); for (int i = 0; i < n * n; i++) { int x = i / n; int y = i % n; if (x < y && s[i] == '-') games.add(i); } int ans = Integer.MAX_VALUE; for (int bit = 0, len = games.size(); bit < (1 << len); bit++) { for (int i = 0; i < len; i++) { int x = games.get(i) / n; int y = games.get(i) % n; if ((bit & (1 << i)) == 0) { s[n * x + y] = 'o'; s[n * y + x] = 'x'; } else { s[n * x + y] = 'x'; s[n * y + x] = 'o'; } } int[] counter = new int[n]; for (int x = 0; x < n; x++) { for (int y = 0; y < n; y++) { if (x >= y) continue; if (s[n * x + y] == 'o') { counter[x]++; } else { counter[y]++; } } } List<List<Integer>> standings = IntStream.range(0, n) .boxed() .collect(Collectors.groupingBy(i -> counter[i])) .entrySet() .stream() .sorted(Comparator.comparing(Entry::getKey, Comparator.reverseOrder())) .map(Entry::getValue) .collect(Collectors.toList()); OptionalInt rank = IntStream.range(0, n) .filter(i -> standings.get(i).contains(0)) .findFirst(); if (rank.isPresent()) ans = Math.min(ans, rank.getAsInt() + 1); } System.out.println(ans); } }