結果
| 問題 |
No.7 プライムナンバーゲーム
|
| コンテスト | |
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2020-01-21 02:24:57 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 3,262 ms / 5,000 ms |
| コード長 | 1,305 bytes |
| コンパイル時間 | 93 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 17,920 KB |
| 最終ジャッジ日時 | 2024-10-01 16:31:27 |
| 合計ジャッジ時間 | 20,794 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
"""
grundy数の計算?
各値についてqを渡しておいてdp
"""
def Sieve(n): #n以下の素数全列挙(O(nloglogn)) retは素数が入ってる。divlisはその数字の素因数が一つ入ってる
ret = []
divlis = [-1] * (n+1) #何で割ったかのリスト(初期値は-1)
flag = [True] * (n+1)
flag[0] = False
flag[1] = False
ind = 2
while ind <= n:
if flag[ind]:
ret.append(ind)
ind2 = ind ** 2
while ind2 <= n:
flag[ind2] = False
divlis[ind2] = ind
ind2 += ind
ind += 1
return ret,divlis
N = int(input())
ret,divs = Sieve(N)
lis = [ [] for i in range(N+1) ]
dic = {}
for i in range(N+1):
dic[i] = {}
gr = [None] * (N+1)
for i in range(N-1):
i += 2
if len(lis[i]) == 0:
gr[i] = 0
else:
num = 0
lis[i].sort()
for j in lis[i]:
if j != num:
gr[i] = num
break
else:
num += 1
if gr[i] == None:
gr[i] = num
for j in ret:
if j + i <= N and gr[i] not in dic[i+j]:
dic[i+j][gr[i]] = 1
lis[j+i].append(gr[i])
if gr[-1] == 0:
print ("Lose")
else:
print ("Win")
SPD_9X2