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