15902번 - Split and Merge
우선 블록들을 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를 저장합니다.
문제의 예시, 이 게시판에 있는 예시,
26161 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2162 1 1 1 2 1 2 2 2 2 2 1 2 2 2 1
20 280640559
등 예시는 다 통과하는데 왜 틀렸다고 나올까요?
제가 간과한 부분이 어디인지 모르겠습니다..
반례라도 적어주시면 감사히 쓰겠습니다.
댓글을 작성하려면 로그인해야 합니다.
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
등 예시는 다 통과하는데 왜 틀렸다고 나올까요?
제가 간과한 부분이 어디인지 모르겠습니다..
반례라도 적어주시면 감사히 쓰겠습니다.