아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

소 프리스비 팀

면접 대비

시간 제한1초메모리 제한128 MB

요약
N마리 소의 평가 점수 합이 F로 나누어떨어지는 공집합이 아닌 부분집합의 개수를 100000000으로 나눈 나머지를 구한다.
난이도

보통10점 중 6점

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

문제

농부 돈이 프리스비를 시작하는 모습을 본 농부 존(FJ)도 함께 즐기고 싶어졌습니다. 존은 11번부터 NN번까지 번호가 매겨진 자신의 소 NN마리 (1≤N≤20001 \le N \le 2000) 중에서 프리스비 팀을 만들려고 합니다. 각 소 ii에게는 프리스비 실력을 나타내는 능력치 RiR_i (1≤Ri≤1000001 \le R_i \le 100000) 가 있습니다. FJ는 소 한 마리 이상을 골라 팀을 구성할 수 있습니다.

그런데 FJ는 팀을 매우 까다롭게 고르기 때문에 조건을 하나 더 두었습니다. 그가 가장 좋아하는 숫자가 FF (1≤F≤10001 \le F \le 1000) 이므로, 팀에 속한 소들의 능력치 합이 FF로 정확히 나누어떨어질 때만 그 팀을 받아들입니다.

존이 만들 수 있는 서로 다른 팀의 개수를 구하세요. 서로 다른 두 소가 같은 능력치를 가지더라도, 구성이 다르면 다른 팀으로 셉니다. 이 값이 매우 커질 수 있으므로, 답을 100000000100000000으로 나눈 나머지를 출력하세요.

입력

  • 첫째 줄: 공백으로 구분된 두 정수 NN과 FF
  • 둘째 줄부터 N+1N+1번째 줄까지: i+1i+1번째 줄에는 정수 RiR_i가 하나 주어집니다

출력

  • 첫째 줄: 존이 고를 수 있는 팀의 개수를 100000000100000000으로 나눈 나머지를 나타내는 정수 하나

힌트

위 예시에서 존은 88과 두 개의 22 중 하나를 묶거나 (8+2=108 + 2 = 10), 두 개의 22와 11을 함께 묶을 수 있습니다 (2+2+1=52 + 2 + 1 = 5). 22가 두 마리이므로 8+28 + 2 조합은 서로 다른 두 팀으로 셉니다.

예제3

  1. 예제 1

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

    입력
    1 5
    5
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1 7
    5
    
    예상 출력
    0