mirror of
https://github.com/codeflash-ai/codeflash.git
synced 2026-05-04 18:25:17 +00:00
85 lines
1.4 KiB
Python
85 lines
1.4 KiB
Python
def problem_p04040(input_data):
|
|
from functools import lru_cache
|
|
from sys import setrecursionlimit, stderr, stdin, stdout
|
|
|
|
setrecursionlimit(10**7)
|
|
|
|
mod = 10**9 + 7
|
|
|
|
def solve():
|
|
|
|
def binom(n, k):
|
|
|
|
res = (modfact[n] * factinv[k]) % mod
|
|
|
|
res = (res * factinv[n - k]) % mod
|
|
|
|
return res
|
|
|
|
h, w, a, b = list(map(int, input_data.split()))
|
|
|
|
ans = 0
|
|
|
|
modfact = [1] * (h + w)
|
|
|
|
factinv = [1] * (h + w)
|
|
|
|
for i in range(1, h + w):
|
|
|
|
modfact[i] = (i * modfact[i - 1]) % mod
|
|
|
|
factinv[i] = (pow(i, mod - 2, mod) * factinv[i - 1]) % mod
|
|
|
|
for i in range(h - a):
|
|
|
|
ans += (binom(b + i - 1, i) * binom(w + h - b - i - 2, h - i - 1)) % mod
|
|
|
|
ans %= mod
|
|
|
|
return ans
|
|
|
|
"""
|
|
|
|
@lru_cache(maxsize=None)
|
|
|
|
def binom(n, k):
|
|
|
|
res = (modfact(n) * factinv(k)) % mod
|
|
|
|
res = (res * factinv(n - k)) % mod
|
|
|
|
return res
|
|
|
|
|
|
|
|
@lru_cache(maxsize=None)
|
|
|
|
def modfact(n):
|
|
|
|
if n == 0:
|
|
|
|
return 1
|
|
|
|
|
|
|
|
return (n * modfact(n - 1)) % mod
|
|
|
|
|
|
|
|
@lru_cache(maxsize=None)
|
|
|
|
def factinv(n):
|
|
|
|
if n == 0:
|
|
|
|
return 1
|
|
|
|
|
|
|
|
return (pow(n, mod - 2, mod) * factinv(n - 1)) % mod
|
|
|
|
"""
|
|
|
|
if __name__ == "__main__":
|
|
|
|
solve()
|