結果
問題 | No.1387 Mitarushi's Remodeling |
ユーザー |
|
提出日時 | 2021-01-19 22:53:15 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,836 bytes |
コンパイル時間 | 188 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 235,356 KB |
最終ジャッジ日時 | 2024-06-29 22:59:47 |
合計ジャッジ時間 | 55,065 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 11 RE * 56 |
ソースコード
mod = 998244353max_kai = 4*10**5kai = [1]for i in range(1, max_kai):kai.append(kai[-1] * i % mod)kkai = [0] * max_kaikkai[-1] = pow(kai[-1], mod - 2, mod)for i in reversed(range(1, max_kai)):kkai[i - 1] = kkai[i] * i % modkkai_sum = [0]*(max_kai+1)for i in range(max_kai):kkai_sum[i+1] = (kkai_sum[i] + kkai[i]) % moddef cutsum(a, b):return kkai_sum[a] - kkai_sum[max(0, b)]def fft_inplace(a, w):n = len(a)m = nt = 1while m >= 2:mh = m >> 1for i in range(0, n, m):for s in range(mh):j, k = i+s, i+mh+sa[j], a[k] = (a[j]+a[k]) % mod, (a[j]-a[k])*w[s*t] % modm = mht *= 2def ifft_inplace(a, w):n = len(a)m = 2t = -(n >> 1)while m <= n:mh = m >> 1for i in range(0, n, m):for s in range(mh):j, k = i+s, i+mh+sa[k] *= w[s*t]a[j], a[k] = (a[j]+a[k]) % mod, (a[j]-a[k]) % modm <<= 1t //= 2n_inv = pow(n, mod-2, mod)for i in range(n):a[i] = a[i] * n_inv % moddef convolution(a, b):n2 = max(len(a) + len(b), 1)n = 1 << (n2-1).bit_length()a = a + [0] * (n-len(a))b = b + [0] * (n-len(b))w_root = pow(3, (mod-1)//n, mod)w = [1] * nfor i in range(1, n):w[i] = w[i-1] * w_root % modfft_inplace(a, w)fft_inplace(b, w)c = [i*j % mod for i, j in zip(a, b)]ifft_inplace(c, w)return c[:n2]n, k = map(int, input().split())m = [int(i)+1 for i in input().split()]b = convolution(m, m[::-1])ans = 0for i in range(n):ans += b[i] * (kai[n-1] * cutsum(n-1, n-k-1) - kai[i]*cutsum(i, i-k))ans %= modfor i in m:ans *= i-1ans %= modans *= pow(4, mod-2, mod)ans %= modprint(ans)