사용자 도구

사이트 도구


ps:problems:boj:25823

조합의 합의 합

ps
링크acmicpc.net/…
출처BOJ
문제 번호25823
문제명조합의 합의 합
레벨골드 1
분류

조합론

시간복잡도O(M)
인풋사이즈M<=200,000
사용한 언어Python 3.13
제출기록32412KB / 264ms
최고기록260ms
해결날짜2026/01/28

풀이

  • $ \sum _{k=0}^{n}{\binom {n}{k}}^{2}={\binom {2n}{n}} $ (반데르몽드 항등식) 을 적용하면, 문제는 C(6,3) + C(8,4) + C(10,5) + … + C(2M, M) 을 구하는 것으로 단순화된다
  • 팩토리얼과 그것들의 모듈러 역원들을 전처리해두면 C(n,k)를 O(1)에 구할수 있으므로, 위의 식도 O(M)에 구할수 있다.
  • C(2n,n)을 C(2n-2,n-1) * (2n-1)(2n)/(n^2) 으로 이전 항을 이용해서 계산한다면 다른 전처리작업 없이 O(M)에 구하는 것도 가능하다. 이쪽이 더 빠르게 동작한다.

코드

"""Solution code for "BOJ 25823. 조합의 합의 합".

- Problem link: https://www.acmicpc.net/problem/25823
- Solution link: http://www.teferi.net/ps/problems/boj/25823

Tags: [math]
"""

MOD = 10**9 + 7


def main():
    M = int(input())

    answer = 0
    comb_2n_n = 6
    for i in range(3, M + 1):
        comb_2n_n = comb_2n_n * (i + i) * (i + i - 1) * pow(i, -2, MOD) % MOD
        answer += comb_2n_n

    print(answer % MOD)


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
Q P T C I
 
ps/problems/boj/25823.txt · 마지막으로 수정됨: 2026/01/28 14:03 저자 teferi