๋ฌธ์
https://www.acmicpc.net/problem/1351
๋ฐฑ์ค ๋ฌธ์ ์ง - 0x15๊ฐ - ํด์
์๊ณ ๋ฆฌ์ฆ: ํด์๋ฅผ ์ฌ์ฉํ ์งํฉ๊ณผ ๋งต, ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
ํ์ด
ํผ๋ณด๋์น์ ๋น์ทํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ฒ ๋ค.A[0] = 1
์ด๋ ์์์ ๊ฐ A[N]
์ N = 0
์ด ๋ ๋๊น์ง ์์ ๋ง์ถฐ ์ชผ๊ฐ๋ฉด ๋๋ค.
๐ก์ฐธ๊ณ ๋ก ⌊ ⌋ ๊ธฐํธ๋ ๋ฐ๋ฅํจ์(floor function)๋ฅผ ๋ํ๋ธ๋ค.
⌊x⌋ = x๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฐ์ฅ ํฐ ์ ์ ๋ฅผ ์๋ฏธํ๋ค.
์ฆ, ⌊i/P⌋ = i // P
์ธ ์
์ด๋ค.
๋ฐ๋ผ์ ๋์
๋๋ฆฌ์ A[0] = 1
์ ๋ฏธ๋ฆฌ ์ ์ฅํด์ฃผ๊ณ , N์ด 0์ด ๋ ๋๊น์ง ์๋์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
A[N]
์ ๊ฐ์ด ๋์ ๋๋ฆฌ์ ์กด์ฌํ๋ค๋ฉด ๊ทธ ๊ฐ์ ๋ฐํ- ์๋ค๋ฉด ์ฌ๊ท๋ฅผ ํตํด
A[N] = A[N//P] + A[N//Q]
์ ๊ฐ์ ๊ตฌํ๊ณ ๋์ ๋๋ฆฌ์ ์ ์ฅ
์ ์ฒด ์ฝ๋
# ์ฌ๊ท + ๋ฉ๋ชจ์ด์ ์ด์
๋ฌธ์ .
# ๋ฉ๋ชจ๋ฆฌ: 32544KB / ์๊ฐ: 40ms
from sys import stdin
input = stdin.readline
N, P, Q = map(int, input().split())
memo = {0: 1} # A0 = 1
def dfs(num):
# Anum์ด memo์ ์กด์ฌํ๋ค๋ฉด ํด๋น ๊ฐ return
if num in memo:
return memo[num]
ret = dfs(num // P) + dfs(num // Q)
memo[num] = ret
return ret
print(dfs(N))