def solve(A, B, C):
MOD = 998_244_353
a = A * (A + 1) // 2
a %= MOD
b = B * (B + 1) // 2
b %= MOD
c = C * (C + 1) // 2
c %= MOD
return (a * b) % MOD * c % MOD
def solve(N, K):
def f(x):
if x < 2:
return 0
if x > 2 * N:
return 0
return N - abs(x - (N + 1))
ret = 0
for ab in range(2, 2 * N + 1):
cd = ab - K
ret += f(ab) * f(cd)
return ret
def solve(N, K, AS):
from collections import Counter
from collections import defaultdict
MOD = 998_244_353
init_unionfind(N)
for i in range(N):
for j in range(i + 1, N):
if all(AS[i][k] + AS[j][k] <= K for k in range(N)):
unite(i, j)
ok1 = Counter(find_root(x) for x in range(N)).values()
init_unionfind(N)
for i in range(N):
for j in range(N):
if all(AS[k][i] + AS[k][j] <= K for k in range(N)):
unite(i, j)
ok2 = Counter(find_root(x) for x in range(N)).values()
ret = 1
for n in ok1:
for x in range(1, n + 1):
ret *= x
ret %= MOD
for n in ok2:
for x in range(1, n + 1):
ret *= x
ret %= MOD
return ret
D
n, kの状態から1をx個使った場合、残りはn - x個。
k - xを1/2以下の数で表現するので、両辺2倍すれば2(k - x)を1以下の数で表現する問題になる