結果
| 問題 |
No.467 隠されていたゲーム
|
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 19:08:50 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,402 bytes |
| コンパイル時間 | 308 ms |
| コンパイル使用メモリ | 81,652 KB |
| 実行使用メモリ | 82,744 KB |
| 最終ジャッジ日時 | 2025-06-12 19:08:54 |
| 合計ジャッジ時間 | 4,236 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 4 WA * 1 TLE * 1 -- * 18 |
ソースコード
def solve():
n = int(input())
d_list = list(map(int, input().split()))
x, y = map(int, input().split())
x_abs = abs(x)
y_abs = abs(y)
D = max(x_abs, y_abs)
if D == 0:
print(0)
return
# Check if all d_i are even and D is odd
all_even = True
for d in d_list:
if d % 2 != 0:
all_even = False
break
if all_even and (D % 2 != 0):
print(-1)
return
max_d = max(d_list)
k_min = (D + max_d - 1) // max_d # ceil(D / max_d)
# Check k in k_min, k_min+1, k_min+2
for k in [k_min, k_min + 1, k_min + 2]:
# Initialize DP for k steps
# At step 0, sum is 0 (mod0=0, mod1=-1)
current_mod0 = 0
current_mod1 = -1
for step in range(1, k+1):
next_mod0 = -1
next_mod1 = -1
# For each possible previous mod
for d in d_list:
# Previous mod0
if current_mod0 != -1:
s = current_mod0 + d
mod = s % 2
if mod == 0:
if s > next_mod0:
next_mod0 = s
else:
if s > next_mod1:
next_mod1 = s
# Previous mod1
if current_mod1 != -1:
s = current_mod1 + d
mod = s % 2
if mod == 0:
if s > next_mod0:
next_mod0 = s
else:
if s > next_mod1:
next_mod1 = s
# Update current_mod for next step
current_mod0, current_mod1 = next_mod0, next_mod1
# If no possible sums, break
if current_mod0 == -1 and current_mod1 == -1:
break
# After k steps, check if possible
if step != k:
continue # didn't complete all steps
target_mod = D % 2
max_s = -1
if target_mod == 0:
if current_mod0 != -1 and current_mod0 >= D:
max_s = current_mod0
else:
if current_mod1 != -1 and current_mod1 >= D:
max_s = current_mod1
if max_s != -1 and (max_s - D) % 2 == 0:
print(k)
return
print(-1)
solve()
gew1fw