문제 링크
- http://icpc.me/16780
문제 출처
- 2016 JOI Open Contest 2번
사용 알고리즘
- Trie
풀이
문자열 $P, Q$가 쿼리로 주어지는데, $P$를 Prefix로 갖는 문자열들의 목록은 주어진 문자열 $S_i$를 정렬한 뒤 lower_bound
/upper_bound
를 이용해 구할 수 있습니다. 이렇게 해서 구한 문자열 중 $Q$를 Suffix를 갖는 문자열을 구하면 됩니다.
$S_i$들의 Suffix Trie를 구축합시다. $Q$를 Suffix로 갖는 문자열의 목록은 Trie에서 $Q$를 찾은 뒤, 마지막에 방문한 정점을 포함하는 문자열입니다. 그러므로 Trie의 각 정점에 해당 정점을 포함하는 “문자열의 인덱스”를 정렬해서 들고 있으면, lower_bound
/upper_bound
를 이용해 $P$를 Prefix, $Q$를 Suffix로 갖는 문자열의 개수를 구할 수 있습니다.
전체 코드
1 |
|