ps:problems:boj:33229
Alleys Construction
| ps | |
|---|---|
| 링크 | acmicpc.net/… |
| 출처 | BOJ |
| 문제 번호 | 33229 |
| 문제명 | Alleys Construction |
| 레벨 | 플래티넘 4 |
| 분류 |
정수론 |
| 시간복잡도 | O(P+qlogn) |
| 인풋사이즈 | P=313109, q<=10^4, n<=10^18 |
| 사용한 언어 | Python 3.13 |
| 제출기록 | 60324KB / 120ms |
| 최고기록 | 120ms |
| 해결날짜 | 2026/01/22 |
풀이
- 문제 자체는 1670과 동일하다. n/2번째 카탈랑 수 (Catalan Number)를 구하면 된다.
- 난이도를 올리는 것은, 이 카탈랑 수를 313109 로 나눈 나머지를 구하는 것. 313109는 소수이기는 하지만, n보다 작을 수 있기 때문에, 일반적인 방법으로는 안되고, N보다 작은 소수로 나눈 나머지 를 구하는 방법을 써야 한다
- 뤼카의 정리를 이용해서 처리하면, 시간복잡도는 O(P)의 전처리 이후, 각 쿼리를 O(logn/logP)에 계산할 수 있다 (P=303109)
코드
"""Solution code for "BOJ 33229. Alleys Construction".
- Problem link: https://www.acmicpc.net/problem/33229
- Solution link: http://www.teferi.net/ps/problems/boj/33229
Tags: [catalan]
"""
import sys
from teflib import combinatorics
MOD = 313109
def main():
cc = combinatorics.CombCalculatorForSmallMod(MOD)
q = int(sys.stdin.readline())
for _ in range(q):
n = int(sys.stdin.readline())
print(cc.comb(n, n // 2) * pow(n // 2 + 1, -1, MOD) % MOD)
if __name__ == '__main__':
main()
- Dependency: teflib.combinatorics.CombCalculatorForSmallMod
ps/problems/boj/33229.txt · 마지막으로 수정됨: 2026/01/22 01:47 저자 teferi

토론