题目描述
Franky是super的人造人,来到了n*m的棋盘世界玩冒险游戏。
n×m的棋盘由n行每行m个方格组成,左上角的方格坐标是(0,0),右下角的方格坐标是(n-1,m-1)。
每次游戏时,他可以降落在棋盘的任意点,并以此为起点开始周游棋盘世界,他的移动规则是:
只能朝向左上(-1,-1),右上(-1,1),左下(1,-1),右下移动(1,1)四个向量移动。
不过这个棋盘世界很特殊:
它的边界是联通的,例如,在7×9的棋盘中 能从(0,0)移动到(6 ,8),
从(1,0)移动到(0,8)和(2,8) ...等等。
更精确地说当他从(x,y)以向量(Vx,Vy)移动后,他的坐标是( (x+Vx)%n , (y+Vy)%m );
现在Franky想知道,他最少要玩几次游戏才能遍历完整个棋盘世界。
PS:猜一猜,有公式喔!
PS2:只和奇偶性有关喔,推推小数据看。
输入
有多组输入数据。
输入数据的第一行为一个数字T,代表有T组输入数据 (0<T≤1000)。
接下来为T组测试数据。每组数据占一行,为2个整数n,m(1≤n,m≤10000)。
输出
对于每一组数据,在1行上输出一个整数, 表示Franky最少要玩的游戏次数。
--正文
试试几组数据就知道了
双偶数的话就是2,否则就是1
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; int main(){ int time,T,n,m; scanf("%d",&T); for (time=1;time<=T;time++){ int tmp = 0; scanf("%d %d",&n,&m); if (n % 2 == 0){ tmp ++; } if (m % 2 == 0){ tmp ++; } if (tmp == 2){ printf("2 "); } else printf("1 "); } return 0; }