您的位置:首页 > 其它

UVA - 11774 Doom's Day (规律)

2014-09-06 16:48 309 查看
We all know about the legend oftower of Hanoi. It is said that the world will end after finishing the puzzle.What we don't know is another legend about when the world will end which is verifiedby the scientists.



It is all about a 3^n * 3^m grid.Initially the grid is filled with 1 to 3^(m+n) in row major order. At each stepthe puzzle is rearranged by reading it in row major order and putting them incollumn major order. See the following examples.



1
2
3
to
1
10
19
4
5
6
2
11
20
7
8
9
3
12
21
10
11
12
4
13
22
13
14
15
5
14
23
16
17
18
6
15
24
19
20
21
7
16
25
22
23
24
8
17
26
25
26
27
9
18
27
1
2
3
to
1
4
7
4
5
6
2
5
8
7
8
9
3
6
9
Now every day the puzzle is rearrangedonce. The legend says if someday initial configuration returns the world willend. Now you are wondering when the world is going to end.



Input

Input starts with a linecontaining number of test cases T ≤ 10000. Each test case containstwo positive integer
m ≤ 10^9and n≤ 10^9.



Output

For each case print one linecontaining days before dooms day. The input will be such that this number fitsin 64 bit unsigned integer.



SampleInput Outputfor Sample Input

5

1 1

1 2

3 1

2 2

98876767 12234

Case 1: 2

Case 2: 3

Case 3: 4

Case 4: 2

Case 5: 98889001

Problemsetter:Tanaeem Md. Moosa

SpecialThanks to: Jane Alam Jan

题意:往3^n * 3^m的格子里1到3^(n+m) 的数,每次的操作是:将数按行优先拿出来,再按列优先放进去,求多少次后回到初始状态

思路:规律ans=(a+b)/gcd(a, b);

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

int gcd(int a, int b) {
	return b == 0 ? a : gcd(b, a % b);
}

int main() {
	int t, a, b, cas = 1;
	scanf("%d", &t);
	while (t--) {
		scanf("%d%d", &a, &b);	
		printf("Case %d: %d\n", cas++, (a+b)/gcd(a, b));
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: