๋ฌธ์
https://www.acmicpc.net/problem/6064
๋ฐฑ์ค ๋ฌธ์ ์ง - 0x12๊ฐ - ์ํ
์๊ณ ๋ฆฌ์ฆ: ์ํ, ๋ธ๋ฃจํธํฌ์ค, ์ ์๋ก
ํ์ด
์ต๊ทผ์ ICPC ํ์ฌ๋๋ ๋จ์๋ฉ๋ฆฌ์นด์ ์์นด ์ ๊ตญ์ด ๋๋ผ์ด ๋ฌธ๋ช ์ ์ง๋ ์นด์ ์ ๊ตญ์ ํ ๋๋ก ํ์ฌ ์ธ์์ก๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ๋ค. ์นด์ ์ ๊ตญ์ ๋ฐฑ์ฑ๋ค์ ํน์ดํ ๋ฌ๋ ฅ์ ์ฌ์ฉํ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์๋ค. ๊ทธ๋ค์ M๊ณผ N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ ๊ฐ์ ์์ฐ์ x, y๋ฅผ ๊ฐ์ง๊ณ ๊ฐ ๋ ๋๋ฅผ <x:y>์ ๊ฐ์ ํ์์ผ๋ก ํํํ์๋ค. ๊ทธ๋ค์ ์ด ์ธ์์ ์์ด์ ํด๋นํ๋ ์ฒซ ๋ฒ์งธ ํด๋ฅผ <1:1>๋ก ํํํ๊ณ , ๋ ๋ฒ์งธ ํด๋ฅผ <2:2>๋ก ํํํ์๋ค. <x:y>์ ๋ค์ ํด๋ฅผ ํํํ ๊ฒ์ <x':y'>์ด๋ผ๊ณ ํ์. ๋ง์ผ x < M ์ด๋ฉด x' = x + 1์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด x' = 1์ด๋ค. ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ง์ผ y < N์ด๋ฉด y' = y + 1์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด y' = 1์ด๋ค. <M:N>์ ๊ทธ๋ค ๋ฌ๋ ฅ์ ๋ง์ง๋ง ํด๋ก์, ์ด ํด์ ์ธ์์ ์ข ๋ง์ด ๋๋ํ๋ค๋ ์์ธ์ด ์ ํด ์จ๋ค.
์๋ฅผ ๋ค์ด, M = 10 ์ด๊ณ N = 12๋ผ๊ณ ํ์. ์ฒซ ๋ฒ์งธ ํด๋ <1:1>๋ก ํํ๋๊ณ , 11๋ฒ์งธ ํด๋ <1:11>๋ก ํํ๋๋ค. <3:1>์ 13๋ฒ์งธ ํด๋ฅผ ๋ํ๋ด๊ณ , <10:12>๋ ๋ง์ง๋ง์ธ 60๋ฒ์งธ ํด๋ฅผ ๋ํ๋ธ๋ค.
๋ค ๊ฐ์ ์ ์ M, N, x์ y๊ฐ ์ฃผ์ด์ง ๋, <M:N>์ด ์นด์ ๋ฌ๋ ฅ์ ๋ง์ง๋ง ํด๋ผ๊ณ ํ๋ฉด <x:y>๋ ๋ช ๋ฒ์งธ ํด๋ฅผ ๋ํ๋ด๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
์ผ์ผํ ๊ณ์ฐํด์ ๊ตฌํ๋ฉด ์๊ฐ์ด๊ณผ๋ค.
๊ท์น์ ํ์
ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
K๋
์ ์นด์ ๋ฌ๋ ฅ์ผ๋ก ํ์ํ๋ฉด (K % M) : (K % N) ์ด ๋๋ค.
๋จ, K๊ฐ M์ด๋ N๊ณผ ๊ฐ์ ๊ฐ์ผ ๊ฒฝ์ฐ ์ ์์ ๋์
ํ๋ฉด 0์ด ๋ฐํ๋์ง๋ง ์ค์ ๋ก๋ M, N์ ํด๋น๋๋ ๊ฐ์ผ๋ก ํํํด์ผํ๋ค.
์๋ฅผ๋ค์ด M = 10, N = 12์ด๊ณ K = 10์ผ๋๋ฅผ ์๊ฐํด๋ณด์.K % M = 0, K % N = 2์ด๋ฏ๋ก ์์ํ ๊ฒฐ๊ณผ๊ฐ์ 0 : 2 ๋ค.
ํ์ง๋ง ์กฐ๊ฑด์ ๋ณด๋ฉด ํ์ฌ ํด x๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์ ํด x'๋ฅผ ํํํ๋ค.
๋ค์ ๋งํด ์ด์ ํด๊ฐ M or N ๋ณด๋ค ์์ผ๋ฉด x' = x + 1๋ก ํํํ๊ณ , ๊ฐ๊ฑฐ๋ ํฌ๋ค๋ฉด 1๋ก ๋ฐ๊ฟ์ฃผ๋๊ฒ์ด๋ค.
10 ๊ฐ์๊ฒฝ์ฐ ์ด์ ํด 9๊ฐ M๋ณด๋ค ์์ผ๋ ๊ทธ๋๋ก 10์ผ๋ก ํํํ๊ณ , 11์ ์ด์ ํด 10์ด M๊ณผ ๊ฐ์ผ๋ฏ๋ก 1๋ก ํํํ๋ค.
๋ฌธ์ ์์ K๊ฐ ์๋ ์นด์๋ฌ๋ ฅ์ผ๋ก ํํ๋ x : y๊ฐ ์ฃผ์ด์ง๊ณ , ์ด๋ฅผ K๋ก ๋ณํํด์ผํ๋ค.
x ๋๋ y๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ๊ณ ๋๋จธ์ง ํ ์ชฝ์ ํ์ํ๋ ๊ณผ์ ์ ์งํํ๋ค.
์นด์๋ฌ๋ ฅ์ผ๋ก ๋ณํํ๋ ์์ (K % M) : (K % N)์ด๋ฏ๋ก, K % M = x, K % N = y๊ฐ ๋์ด์ผํ๋ค.
๋ฐ๋ผ์ K๊ฐ x, y๋ฅผ ๋ชจ๋ ๋ง์กฑํ๋ ค๋ฉด 1) x๋ก ์์ํด์ M ๊ฐ๊ฒฉ์ผ๋ก ์ฆ๊ฐ, 2) y๋ก ์์ํด์ N ๊ฐ๊ฒฉ์ผ๋ก ์ฆ๊ฐํด์ผํ๋ค.
์ฆ, K - x๊ฐ M์ ๋ฐฐ์, K - y๊ฐ N์ ๋ฐฐ์์ฌ์ผ ํ๋๊ฒ์ด๋ค.
์ ์ฒด ์ฝ๋
# ๋ฉ๋ชจ๋ฆฌ: 32544KB / ์๊ฐ: 4448ms
from sys import stdin
input = stdin.readline
T = int(input())
for _ in range(T):
M, N, x, y = map(int, input().split())
k = x
while k <= M * N:
# k % M == x ์ ๊ฐ์ด ์์ฑํ๋ฉด k == M ์ผ๋๋ฅผ ์ฒ๋ฆฌํ์ง ๋ชปํจ.
if (k - x) % M == 0 and (k - y) % N == 0:
print(k)
break
k += M
else:
print(-1)
์์ 1์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ์งํํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
M, N, x, y = 10, 12, 3, 9
# k = x
k = 3
# 1) k = 3
(k - x) % 10 = 0
(k - y) % 12 = 6
k += 10
# 2) k = 13
(k - x) % 10 = 0
(k - y) % 12 = 1
k += 10
# 3) k = 23
(k - x) % 10 = 0
(k - y) % 12 = 2
k += 10
# 4) k = 33
(k - x) % 10 = 0
(k - y) % 12 = 0
break
๊ฒ์ฆํด๋ณด๋ฉด k % M = 3, k % N = 9 ๋ก x, y๊ฐ์ ๋ง์กฑํ๋ค.

์ด๋ชจํฐ์ฝ ๋ฐ์๊น์ ๋ฃ์ด๋ดค๋ค.