結果
| 問題 | No.3215 Make K types-able |
| コンテスト | |
| ユーザー |
detteiuu
|
| 提出日時 | 2026-08-23 02:20:08 |
| 言語 | PyPy3 (7.3.23 + ac-library) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 1,629 bytes |
| 記録 | |
| コンパイル時間 | 240 ms |
| コンパイル使用メモリ | 95,980 KB |
| 実行使用メモリ | 113,656 KB |
| 最終ジャッジ日時 | 2026-08-23 02:20:22 |
| 合計ジャッジ時間 | 7,281 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | WA * 1 TLE * 1 -- * 8 |
ソースコード
from sys import stdin
input = stdin.readline
class CP:
def __init__(self, N):
self.fact = [1]*(N+1)
self.fact_inv = [1]*(N+1)
for i in range(2, N+1):
self.fact[i] = self.fact[i-1]*i%MOD
self.fact_inv[N] = pow(self.fact[N], -1, MOD)
for i in reversed(range(1, N)):
self.fact_inv[i] = self.fact_inv[i+1]*(i+1)%MOD
def C(self, N, K):
if N < 0 or K < 0 or N < K:
return 0
return self.fact[N]*self.fact_inv[K]%MOD*self.fact_inv[N-K]%MOD
def P(self, N, K):
if N < 0 or K < 0 or N < K:
return 0
return self.fact[N]*self.fact_inv[N-K]%MOD
def H(self, N, K):
if N < 0 or K < 0:
return 0
if N == K == 0: return 1
return self.C(N+K-1, K)
MOD = 998244353
cp = CP(10**6)
F = [0, 1]
for n in range(2, 10**5*2+1):
F.append(F[-1]*F[-1]%MOD+pow(4, (pow(2, n-1, MOD-1)-1)%(MOD-1), MOD))
for _ in range(int(input())):
N, K = map(int, input().split())
if K == 1:
print(F[N])
continue
K -= 1
dp = [0]*(K+1)
dp[1] = 1
for i in range(N-1):
ndp = [0]*(K*2+1)
for j in range(K+1):
ndp[j*2] = dp[j]
for j in range(K*2+1):
if ndp[j] == 0: continue
cnt = j//2
p = 1
SUM = 1
for k in range(1, cnt+1):
SUM *= F[N-1-i]
SUM %= MOD
p *= 2
p %= MOD
ndp[j-k] += ndp[j]*SUM%MOD*p%MOD*cp.C(cnt, k)%MOD
ndp[j-k] %= MOD
dp = ndp
print(dp[K])
detteiuu