사용자 도구

사이트 도구


ps:problems:boj:1351

무한 수열

ps
링크acmicpc.net/…
출처BOJ
문제 번호1351
문제명무한 수열
레벨골드 5
분류

기초

시간복잡도O(n^K) (K = log2 / log(min(p,q)))
인풋사이즈n<=10^19, p<=10^9, q<=10^9
사용한 언어Python
제출기록32416KB / 100ms
최고기록56ms
해결날짜2022/06/07
태그

[라이] 이진 검색 트리

풀이

  • 점화식이 주어진 상태에서 구현만 하면 된다. 바텀업으로 바꿔서 처리하기는 복잡하고 비효율적이고, 그냥 저대로 재귀함수를 만들고 memoization을 추가해주면 된다.
  • 시간복잡도 계산은 좀 어려운데.. 대충 x=min(p,q)를 x라 하고 T(n)=2*T(n/x)+c 라고 하면.. 마스터정리를 적용해서 $ O(n^{log_x{2}}) $ 처럼 구할수 있을거 같다.

코드

"""Solution code for "BOJ 1351. 무한 수열".

- Problem link: https://www.acmicpc.net/problem/1351
- Solution link: http://www.teferi.net/ps/problems/boj/1351
"""

import functools


@functools.cache
def calc(n, p, q):
    if n == 0:
        return 1
    return calc(n // p, p, q) + calc(n // q, p, q)


def main():
    N, P, Q = [int(x) for x in input().split()]
    print(calc(N, P, Q))


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
N C E W P
 
ps/problems/boj/1351.txt · 마지막으로 수정됨: 2022/07/05 06:50 저자 teferi