날짜 계산 문제와 비슷하다. 두 문제 모두 브루트포스를 이용해 해결할 수 있지만, 카잉 달력 문제는 시간초과를 고려해서 조금 다른 방식으로 풀어야 한다.
num을 x로 초기화하고 m을 계속해서 더해주는 방식으로 원하는 답이 나올 때까지 검사했다. 답을 구하지 못하면 -1을 반환하도록 만들었다.
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int m, n, x, y;
int t; cin >> t;
while (t--)
{
cin >> m; cin >> n; cin >> x; cin >> y;
int num;
for (num = x; num <= m * n; num += m)
{
if (((num - x) % m == 0) && ((num - y) % n == 0))
{
cout << num << '\n';
break;
}
}
if (num > m * n)
cout << "-1" << '\n';
}
}