結果
| 問題 |
No.3117 Reversible Tile
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-04-19 07:17:46 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 91 ms / 3,000 ms |
| コード長 | 1,250 bytes |
| コンパイル時間 | 361 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 71,620 KB |
| 最終ジャッジ日時 | 2025-04-19 07:17:50 |
| 合計ジャッジ時間 | 3,105 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 |
ソースコード
# solved by ChatGPT o4-mini-high (really sorry)
MOD = 998244353
n, m = map(int, input().split())
A = list(map(int, input().split()))
s = 0
for i in range(n):
if A[i] == 1 and (i == 0 or A[i-1] == 0):
s += 1
P = n + 1
max_n = n + 1
fac = [1] * (max_n + 1)
for i in range(1, max_n + 1):
fac[i] = fac[i-1] * i % MOD
invfac = [1] * (max_n + 1)
invfac[max_n] = pow(fac[max_n], MOD-2, MOD)
for i in range(max_n, 0, -1):
invfac[i-1] = invfac[i] * i % MOD
def comb(n, k):
if k < 0 or k > n:
return 0
return fac[n] * invfac[k] % MOD * invfac[n-k] % MOD
A_seq = [0] * (2*s + 1)
for k in range(2*s + 1):
c = comb(2*s, k)
if k & 1:
c = (MOD - c)
A_seq[k] = c
rem = P - 2*s
B_seq = [comb(rem, l) for l in range(rem + 1)]
g_seq = [0] * (P + 1)
for k in range(2*s + 1):
a = A_seq[k]
if a:
for l in range(rem + 1):
g_seq[k+l] = (g_seq[k+l] + a * B_seq[l]) % MOD
powers = [0] * (P + 1)
for t in range(P + 1):
d = P - 2*t
base = (d*d - P) % MOD
powers[t] = pow(base, m, MOD)
ans_num = 0
for t in range(P + 1):
ans_num = (ans_num + g_seq[t] * powers[t]) % MOD
inv2 = (MOD+1)//2
inv_factor = pow(inv2, P + m, MOD)
ans = ans_num * inv_factor % MOD
print(ans)