XidianOJ 1041: Franky的游戏O

题目描述

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;
}
原文地址:https://www.cnblogs.com/ToTOrz/p/6184501.html