문제 링크
- http://icpc.me/15064
사용 알고리즘
- 해싱
시간복잡도
- $O(X \log N \log X)$
풀이
순서를 정하는 문제이므로 Exchange Argument를 이용한 그리디 알고리즘을 생각해봅시다.
두 수열 $A, B$가 있을 때 어떤 것을 먼저 사용해야 할까요? 만약 두 수열의 첫 원소가 다르다면 첫 원소가 작은 수열을 먼저 사용하는 것이 이득입니다. 그렇지 않을 경우, 사전순으로 빠른 것, 한 문자열이 다른 문자열을 Prefix로 갖는다면 길이가 긴 것을 사용하는 것이 이득입니다.
앞에 있는 원소가 제거되는 상황에서 두 수열의 사전순 비교를 하는 것은 해싱을 이용해 전처리 $O(\vert S \vert)$, 비교는 $O(\log \vert S \vert)$에 할 수 있습니다. 수열들을 Heap으로 관리하면 문제를 $O(X \log N \log X)$에 해결할 수 있습니다. 이때 $X$는 모든 수열의 길이의 합입니다.
전체 코드
1 |
|