만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

부분집합 합의 피보나치 수

시간 제한5초메모리 제한512 MB

요약
서로 다른 N개 수의 집합에서 크기 K인 모든 부분집합 s에 대해 F[sum(s)]의 합을 99991로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

유형
조합론, 동적 계획법, 수학, 정수론
정답자
아직 제출이 없습니다

문제

피보나치 수는 다음과 같이 정의한다.

  • F[1]=1F[1] = 1
  • F[2]=1F[2] = 1
  • F[N]=F[N−1]+F[N−2]F[N] = F[N-1] + F[N-2] (N≥3N \ge 3)

원소가 NN개인 집합 SS와 정수 KK가 주어진다. 크기가 KK인 SS의 부분집합 ss마다 원소의 합 sum(s)\mathrm{sum}(s)를 구한 다음, F[sum(s)]F[\mathrm{sum}(s)]를 모두 더한 값을 구하는 프로그램을 작성하시오.

예를 들어 S={1,2,3,4,5}S = \{1, 2, 3, 4, 5\}이고 K=2K = 2이면 크기가 2인 부분집합은 {1,2}\{1, 2\}, {1,3}\{1, 3\}, {1,4}\{1, 4\}, {1,5}\{1, 5\}, {2,3}\{2, 3\}, {2,4}\{2, 4\}, {2,5}\{2, 5\}, {3,4}\{3, 4\}, {3,5}\{3, 5\}, {4,5}\{4, 5\}이다. 각 부분집합의 합은 차례대로 3, 4, 5, 6, 5, 6, 7, 7, 8, 9이므로 답은 F[3]+F[4]+F[5]+F[6]+F[5]+F[6]+F[7]+F[7]+F[8]+F[9]=112F[3] + F[4] + F[5] + F[6] + F[5] + F[6] + F[7] + F[7] + F[8] + F[9] = 112이다.

입력

첫째 줄에 NN과 KK가 주어진다. (1≤N≤50 0001 \le N \le 50\,000, 1≤K≤N1 \le K \le N)

둘째 줄에 집합 SS의 원소 NN개가 공백으로 구분되어 주어진다. 각 원소는 10910^9 이하의 자연수이고, 서로 다르다.

출력

크기가 KK인 부분집합 ss마다 구한 F[sum(s)]F[\mathrm{sum}(s)]의 합을 99991로 나눈 나머지를 첫째 줄에 출력한다.

예제3

  1. 예제 1

    입력
    3 1
    1 2 3
    
    예상 출력
    4
    
  2. 예제 2

    입력
    5 2
    1 2 3 4 5
    
    예상 출력
    112
    
  3. 예제 3

    입력
    6 3
    3 5 7 10 20 30
    
    예상 출력
    57796