728x90
๋ฌธ์
ํ์ด
์์ ์ด์งํธ๋ฆฌ ๋ฐ LCA ๋ฌธ์ ์ด๋ค.
์์ ์ด์งํธ๋ฆฌ์ ๋ ๋ฒจ์ log2๋ฅผ ํตํด ๊ตฌํ ์ ์๊ณ ๋ถ๋ชจ๋ /2๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
์ฆ ๋ ๋ ธ๋์ ๋ ๋ฒจ์ ๊ตฌํ ๋ค, ๋ ๋ฒจ์ ์๋ก ๊ฐ๊ฒ ๋ง์ถฐ์ค ๋ค, ๋ ๋ ธ๋๊ฐ ์๋ก ๊ฐ์ ๋๊น์ง ๊ฐ ๋ ธ๋์ /2๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
(์ด์งํธ๋ฆฌ์ LCA๋ฅผ ๊ณต๋ถํ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ค.)
์ฝ๋
import sys, math
input = sys.stdin.readline
t = int(input())
def getLevel(n):
return math.floor(math.log2(n))
for _ in range(t):
a, b = map(int, input().split())
while True:
levelA, levelB = getLevel(a), getLevel(b)
if levelA > levelB:
a //= 2
elif levelA < levelB:
b //= 2
else:
break
while a != b:
a //= 2
b //= 2
print(a * 10)
๋ง๋ฌด๋ฆฌ
ํธ๋ฆฌ ๋ฌธ์ ๊ฐ ์ด๋ฐ ์์ผ๋ก๋ ํ์ฉ๋๋๊ตฌ๋ ์ถ์ ๋ฌธ์ ์๋ค.
728x90