728x90
6064번: 카잉 달력
입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다.
www.acmicpc.net
육십갑자의 확장판 문제.
M = 10, N = 12 인 경우는 육십갑자의 방식과 같다. (10개의 천간, 12개의 지지)
총 경우의 수는 M과 N의 최소공배수 만큼이다.
따라서 육십갑자의 모든 경우의 수는 10과 12의 최소공배수인 60이다.
처음에는 최소공배수를 구해서 그만큼 돌리다가 안나오면 -1, 나오면 출력을 하려고 했으나...
그냥 배열로 중복을 체크하면서, x는 고정시킨 채 y가 나오는 해를 구할 때까지 m년만큼 지내고 중복이 발생하면 바로 -1을 출력하는 방식으로 답을 구했다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include <bits/stdc++.h>
using namespace std;
#define swap(a,b) (a)^=(b)^=(a)^=(b)
#define endl '\n'
typedef long long lld;
int main()
{
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);
cout.tie(NULL);
int tc;
cin >> tc;
while(tc--)
{
int m, n, x, y;
cin >> m >> n >> x >> y;
x--; y--;
vector<bool> check(n, false);
int tmp = x%n, cnt = x+1;
while(1)
{
if(check[tmp])
{
cout << -1 << endl;
break;
}
check[tmp] = true;
if(tmp == y)
{
cout << cnt << endl;
break;
}
cnt += m;
tmp = (tmp+m)%n;
}
}
return 0;
}
|
cs |
728x90
'Problem Solving > BOJ 문제풀이' 카테고리의 다른 글
| 1238 파티 (0) | 2021.05.05 |
|---|---|
| 4779 칸토어 집합 (0) | 2021.05.05 |
| 1202 보석 도둑 (0) | 2021.04.27 |
| 16928 뱀과 사다리 게임 (0) | 2021.04.26 |
| 9019 DSLR (0) | 2021.04.25 |