結果
問題 |
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)