Submission #65693279
Source Code Expand
# 高速なの O(N)
from itertools import permutations
class Binominal:
def __init__(self, N, mod) -> None:
fact = [1, 1]
factinv = [1, 1]
inv = [0, 1]
for i in range(2, N + 1):
fact.append((fact[-1] * i) % mod)
inv.append((-inv[mod % i] * (mod // i)) % mod)
factinv.append((factinv[-1] * inv[-1]) % mod)
self.fact = fact
self.factinv = factinv
self.inv = inv
self.mod = mod
self.N = N
def nPr(self, n, r):
if r < 0 or n < r:
return 0
return self.fact[n] * self.factinv[n - r] % self.mod
def nCr(self, n, r):
if r < 0 or n < r:
return 0
r = min(r, n - r)
return (
self.fact[n] * self.factinv[r] % self.mod * self.factinv[n - r] % self.mod
)
MOD = 998244353
def main():
A, B, C, D = map(int, input().split())
ans = solve(A, B, C, D)
print(ans)
def solve(A, B, C, D):
bn = Binominal(A + B + C + D, MOD)
ans = 0
for b in range(B + 1):
ans += bn.nCr(A + b - 1, b) * bn.nCr(B - b + C + D, C) % MOD
ans %= MOD
return ans
def naive(A, B, C, D):
ans = 0
cand = list("a" * A) + list("b" * B) + list("c" * C) + list("d" * D)
seen = set()
for pat in permutations(cand):
s = "".join(pat)
if s.rindex("a") > s.index("d"):
continue
if s.rindex("a") > s.index("c"):
continue
if s.rindex("b") > s.index("d"):
continue
seen.add(s)
print(*seen, sep="\n")
return len(seen)
def test():
print(solve(2, 1, 1, 1), naive(2, 1, 1, 1))
print(solve(1, 1, 1, 2), naive(1, 1, 1, 2))
print(naive(1, 1, 1, 1))
# test()
main()
"""
補集合を考えた方が楽そう?
制約がないパターン数
(ABCD)C(A) (BCD)C(B) (CD)C(C)
"""
Submission Info
| Submission Time |
|
| Task |
E - Fruit Lineup |
| User |
mo12412 |
| Language |
Python (PyPy 3.10-v7.3.12) |
| Score |
475 |
| Code Size |
1979 Byte |
| Status |
AC |
| Exec Time |
721 ms |
| Memory |
307616 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
475 / 475 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 02_max_00.txt, 02_max_01.txt, 02_max_02.txt, 02_max_03.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_sample_00.txt |
AC |
55 ms |
76472 KiB |
| 00_sample_01.txt |
AC |
56 ms |
76516 KiB |
| 00_sample_02.txt |
AC |
426 ms |
299656 KiB |
| 01_random_00.txt |
AC |
432 ms |
299784 KiB |
| 01_random_01.txt |
AC |
453 ms |
299552 KiB |
| 01_random_02.txt |
AC |
401 ms |
299660 KiB |
| 01_random_03.txt |
AC |
203 ms |
286640 KiB |
| 01_random_04.txt |
AC |
308 ms |
295824 KiB |
| 01_random_05.txt |
AC |
614 ms |
307132 KiB |
| 01_random_06.txt |
AC |
413 ms |
299760 KiB |
| 01_random_07.txt |
AC |
265 ms |
295916 KiB |
| 01_random_08.txt |
AC |
261 ms |
295944 KiB |
| 01_random_09.txt |
AC |
309 ms |
296064 KiB |
| 02_max_00.txt |
AC |
693 ms |
307388 KiB |
| 02_max_01.txt |
AC |
721 ms |
307500 KiB |
| 02_max_02.txt |
AC |
710 ms |
307328 KiB |
| 02_max_03.txt |
AC |
707 ms |
307616 KiB |