6016 : 재귀·분할정복 종합
•시간제한: 2.000 S
•메모리제한: 256 MB
•제출: 0
•통과: 0
•만든사람: suakii
문제 설명
재귀 및 분할 정복을 사용하는 다음 4가지 핵심 알고리즘 명령들을 한 번에 처리하는 종합 프로그램을 작성하십시오.
지원 명령어:
1.
2.
3.
4.
[제약 조건]
• 명령 수 $N$: $1 \le N \le 20$ (정수)
• MERGE/INV: 배열 크기 $n \le 20{,}000$
• CLOSEST: 점 개수 $n \le 10{,}000$
지원 명령어:
1.
POW a n m: 거듭제곱 $a^n \bmod m$을 분할 정복으로 구하여 출력합니다.2.
MERGE n a_1 a_2 ... a_n: 합병 정렬을 수행하여 정렬된 결과와 역전쌍(Inversion Count) 개수 $\bmod 10^9+7$을 한 줄에 공백 구분해 출력합니다.3.
INV n a_1 a_2 ... a_n: 배열의 합병 정렬 역전쌍 개수 $\bmod 10^9+7$만 구하여 한 줄에 출력합니다. (정렬 배열은 출력하지 않음)4.
CLOSEST n x_1 y_1 ... x_n y_n: $n$개 점의 좌표를 받아 최근접 두 점 거리의 최솟값을 소수점 넷째 자리까지 출력합니다.[제약 조건]
• 명령 수 $N$: $1 \le N \le 20$ (정수)
• MERGE/INV: 배열 크기 $n \le 20{,}000$
• CLOSEST: 점 개수 $n \le 10{,}000$
입력 설명
첫째 줄에 실행할 명령어의 개수 $N$이 주어집니다. ($1 \le N \le 20$)
둘째 줄부터 $N$개의 줄에 걸쳐 각 줄에 위의 명령어 규격이 하나씩 주어집니다.
($n \le 20{,}000$, 모든 연산에 사용되는 기본 기법은 분할 정복이어야 합니다)
둘째 줄부터 $N$개의 줄에 걸쳐 각 줄에 위의 명령어 규격이 하나씩 주어집니다.
($n \le 20{,}000$, 모든 연산에 사용되는 기본 기법은 분할 정복이어야 합니다)
출력 설명
각 줄의 명령을 수행한 결과를 순서대로 한 줄에 하나씩 출력합니다.
입력 예시
COPY
복사되었습니다!
복사되었습니다!
4
POW 2 10 1000
MERGE 5 5 4 3 2 1
CLOSEST 4 0 0 3 4 1 1 5 2
INV 5 5 4 3 2 1
출력 예시
COPY
복사되었습니다!
복사되었습니다!
24
1 2 3 4 5 10
1.4142
10
도움
앞서 각각 개별 문제로 구현한 고속 거듭제곱, 합병정렬 기반 역전쌍 계산, Closest Pair of Points 분할 정복 모듈들을 단일 프로그램 안에 클래스나 독립 함수들로 병합하여 조건문으로 분기 처리합니다.