XidianOJ 1041: Franky的游戏O

本文介绍了一种解决Franky在特殊棋盘上遍历所有格子最少游戏次数的方法。通过判断棋盘尺寸的奇偶性,确定遍历所需的最少尝试次数。

题目描述

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\n");
        }
        else
            printf("1\n"); 
    }
    return 0;
}

 

 

转载于:https://www.cnblogs.com/ToTOrz/p/6184501.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值