hwy16016   3년 전

우선 블록들을 3가지로 분류했습니다.

C

-ㅡㅡㅡ-

ㅡㅡㅡㅡ

C3

D

ㅡ-     -ㅡㅡ

-ㅡ     ㅡㅡ-

D1      D2

E

ㅡㅡㅡㅡㅡ

-ㅡㅡㅡㅡ-

E4

--          ㅡ

ㅡ         --

각각의 블럭들은 아래와 같은 점화식으로 나타낼 수 있습니다.

C(n)=(2)C(1) * C(n-1) * (2n)C(1) + sigma_(i=2 to n-1){C(i-1) * C(n-i) * (2n)C(2i-1)}

D(n)=C(n-1) + sigma_(i=2 to n-1){D(i-1) * C(n-i) * (2n-1)C(2i-2)} + D(n-1) * (2n-1)C(1)

E(n)=2 * D(n) + sigma_(i=2 to n-1){D(i-1) * D(n-i) * (2n)C(2i-2)}

위에 블럭배치는 단순한게 카운트했습니다.(sm으로, 작업의 수인 1 더해줌)

그러면 L을 위의 sm/c/d/e 4가지로 분해할 수 있습니다.

해야 하는 전체 작업의 수를 T, 단순한 작업을 sm이라 하면

sol=(T)C(sm) * (sm)! * (curT)C(현재 블럭의 작업의 수) * 현재 블럭의 작업 순서 배치의 경우의 수

입니다.

(curT는 아직 배치되지 않은 작업들의 개수)

ct, facto, cdet는 각각 combination, factorial, 위의 블럭들의 조합의 경우의 수(0 : c, 1 : d, 2 : e)를 저장합니다.

clist는 블럭들의 시작과 끝을 저장해서 cde를 만들기 위해 사용했고 cde는 L에 있는 c/d/e를 저장합니다.

문제의 예시, 이 게시판에 있는 예시, 

26
16
1 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2
16
2 1 1 1 2 1 2 2 2 2 2 1 2 2 2 1

20 280640559

등 예시는 다 통과하는데 왜 틀렸다고 나올까요?

제가 간과한 부분이 어디인지 모르겠습니다..

반례라도 적어주시면 감사히 쓰겠습니다.

댓글을 작성하려면 로그인해야 합니다.