結果
| 問題 |
No.103 素因数ゲーム リターンズ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2014-12-13 03:13:41 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 203 ms / 5,000 ms |
| コード長 | 1,701 bytes |
| コンパイル時間 | 4,435 ms |
| コンパイル使用メモリ | 79,068 KB |
| 実行使用メモリ | 42,668 KB |
| 最終ジャッジ日時 | 2024-06-11 21:03:17 |
| 合計ジャッジ時間 | 9,638 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 20 |
ソースコード
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Yuki103 {
boolean[] sieve;
int[] memo;
final int MAX = 10000;
public Yuki103() {
Scanner scanner = new Scanner(System.in);
memo = new int[MAX + 1];
Arrays.fill(memo, -1);
sieve = new boolean[MAX + 1];
Arrays.fill(sieve, true);
sieve[0] = false;
sieve[1] = false;
for (int i = 2; i < sieve.length; i++) {
if (!sieve[i])
continue;
for (int j = 2 * i; j < sieve.length; j += i)
sieve[j] = false;
}
int N = scanner.nextInt();
int nim = 0;
for (int i = 0; i < N; i++) {
nim ^= getGrundyNumber(scanner.nextInt());
}
//後者必勝
if (nim == 0) {
System.out.println("Bob");
} else {
System.out.println("Alice");
}
}
int getGrundyNumber(int M) {
if (memo[M] >= 0) {
return memo[M];
}
Set<Integer> numbers = new HashSet<>();
for (int k = 2; k <= M; k++) {
if (!sieve[k]) {
continue;
}
int m = M;
for (int i = 0; m % k == 0 && i < 2; i++) {
m /= k;
numbers.add(getGrundyNumber(m));
}
}
int res = 0;
for (; numbers.contains(res); res++) {
}
return memo[M] = res;
}
public static void main(String[] args) {
Yuki103 yuki103 = new Yuki103();
}
}