結果
| 問題 |
No.7 プライムナンバーゲーム
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2014-10-04 15:23:43 |
| 言語 | Python2 (2.7.18) |
| 結果 |
AC
|
| 実行時間 | 779 ms / 5,000 ms |
| コード長 | 1,274 bytes |
| コンパイル時間 | 140 ms |
| コンパイル使用メモリ | 6,912 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-01 15:27:09 |
| 合計ジャッジ時間 | 5,936 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
# -*- coding: utf-8 -*-
def eratos(n):
list = xrange(2, n + 1)
ans = []
while len(list):
ans.append(list[0])
list = filter(lambda x: x % list[0] > 0, list)
return ans
def eratos2(n):
table = [True] * (n + 1)
table[0] = table[1] = False
a = 2
ans = []
while a <= n:
if table[a]:
ans.append(a)
k = 2
while a * k <= n:
table[a * k] = False
k += 1
a += 1
return ans
def solve(N):
prime_map = eratos2(N)
memo = [None] * (N + 1)
dp = [False] * (N + 1)
# Trueなら相手の負け
def dfs(n):
if memo[n] is not None:
return memo[n]
for p in filter(lambda x: x <= n, prime_map):
if 0 <= n - p <= 1:
continue
if not dfs(n - p):
memo[n] = True
return memo[n]
memo[n] = False
return memo[n]
def on_dp(N):
dp[0] = True
dp[1] = True
for i in xrange(2, N + 1):
for p in prime_map:
if p > i: break
dp[i] |= not dp[i - p]
return dp[N]
print "Win" if on_dp(N) else "Lose"
solve(int(raw_input()))
# solve(10000) # Win