結果

問題 No.2 素因数ゲーム
ユーザー NoneNone
提出日時 2020-09-22 23:24:48
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 45 ms / 5,000 ms
コード長 1,706 bytes
コンパイル時間 144 ms
コンパイル使用メモリ 82,160 KB
実行使用メモリ 60,928 KB
最終ジャッジ日時 2024-06-26 23:53:37
合計ジャッジ時間 2,419 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 44 ms
55,348 KB
testcase_01 AC 42 ms
54,144 KB
testcase_02 AC 42 ms
54,692 KB
testcase_03 AC 42 ms
54,732 KB
testcase_04 AC 42 ms
54,272 KB
testcase_05 AC 41 ms
55,000 KB
testcase_06 AC 40 ms
54,720 KB
testcase_07 AC 42 ms
53,812 KB
testcase_08 AC 44 ms
60,056 KB
testcase_09 AC 41 ms
54,868 KB
testcase_10 AC 41 ms
55,100 KB
testcase_11 AC 41 ms
55,640 KB
testcase_12 AC 41 ms
54,796 KB
testcase_13 AC 42 ms
54,172 KB
testcase_14 AC 41 ms
54,048 KB
testcase_15 AC 45 ms
60,668 KB
testcase_16 AC 45 ms
60,732 KB
testcase_17 AC 41 ms
55,092 KB
testcase_18 AC 43 ms
54,672 KB
testcase_19 AC 45 ms
60,928 KB
testcase_20 AC 45 ms
59,396 KB
testcase_21 AC 45 ms
60,432 KB
testcase_22 AC 45 ms
58,952 KB
testcase_23 AC 41 ms
54,936 KB
testcase_24 AC 44 ms
59,692 KB
testcase_25 AC 43 ms
58,948 KB
testcase_26 AC 40 ms
54,396 KB
testcase_27 AC 42 ms
54,732 KB
testcase_28 AC 41 ms
54,588 KB
testcase_29 AC 40 ms
55,748 KB
testcase_30 AC 43 ms
59,204 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

def mex(array):
    i = 0
    while i in array:
        i += 1
    return i

def solve(NN):
    """ NN: kの最大値(大雑把に遷移可能回数の最大値) """
    grundy = defaultdict(lambda: -1)
    for k in range(NN+1):
        for p in data_set(k):
            grundy[p] = mex(list(grundy[q] for q in next_set(p)))
    return grundy

def solve2(NN):
    """ 一次元専用 """
    grundy = [-1]*(NN+1)
    for p in range(NN+1):
        grundy[p] = mex(list(grundy[q] for q in next_set(p)))
    return grundy

def zeros(grundy):
    tmp = set()
    for k in range(len(grundy)):
        for p in data_set(k):
            if not grundy[p]:
                tmp.add(p)
    return sorted(list(tmp))

def Sprague_Grundy(NN, array):
    """ N 個の部分不偏ゲームを並行して行うような不偏ゲーム """
    grundy = solve(NN)
    tmp = 0
    for p in array:
        tmp ^= grundy[p]
    return tmp


####( 問題毎に設定 )##################################################

def data_set(k):
    """ 有限ゲームなので、何かの変数は単調減数となっている。これを k とする。"""
    yield k

def next_set(p):
    tmp = set()
    for i in range(1, p+1):
        if p-i>=0:
            tmp.add(p-i)
    return tmp

####################################################################

def prime_factors(n):
    i = 2
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            yield i
    if n > 1:
        yield n

from collections import defaultdict
from collections import Counter

N = int(input())
d = Counter(prime_factors(N))
A = list(d.values())
print("Alice" if Sprague_Grundy(max(A),A)!=0 else "Bob")
0