← Back to List

20443번: 배드민턴 대회 ↗

Solutions

Python 3
345 B | 345 chars
MOD = 1_000_000_007
derangement = [1, 0, 1, 2, 9]

for i in range(5, 110):
  derangement.append(((i-1) * (derangement[-1] + derangement[-2])) % MOD)

def nCr(n, k):
  ret = 1
  for i in range(n, n-k, -1):
    ret *= i
  for i in range(1, k+1):
    ret //= i
  return ret

n = int(input())
k = n % 4
print((derangement[n - k] * nCr(n, k)) % MOD)