• 【题解】教主


    题目描述

    Bessie正在学习如何下象棋。棋盘有P行P列。行和列编号都是0至P-1。
    我们可以使用其两个坐标值来描述每个单元格:(r,c)。
    Bessie最近了解到其中一个棋子:教主。教主每次的移动方式非常特殊。
    不妨假设教主当前所在位置是单元格(r,c),则1次移动可到达的所有单元格包括:
    1.(r+k,c+k)形式的所有单元格,其中k是正整数。
    2.(r+k,c-k)形式的所有单元格,其中k是正整数。
    3.(r-k,c+k)形式的所有单元格,其中k是正整数。
    4.(r-k,c-k)形式的所有单元格,其中k是正整数。
    当然,教主必须始终在棋盘内,不能走到棋盘外面。
    现在Bessie拿来了一个空的棋盘,他把一个教主放在格子(r1,c1)。
    他现在想要使用尽可能少的移动将其移动到单元格(r2,c2),请输出最小的移动次数。
    如果教主不可能到达目标单元格,则返回-1。

    输入输出格式

    输入格式:

    一行,5个整数:P,r1,c1,r2,c2。

    输出格式:

    一个整数。

    输入输出样例

    输入样例一:

    8 4 6 7 3
    

    输出样例一:

    1
    

    因为教主最多走2步就可以到达棋盘上所有可到达的点
    所以先判断该点是否可以被到达,如果c2-c1的绝对值的奇偶性与r2-r1的绝对值的奇偶性相同,就说明该点可到达
    如果c2-c1的绝对值与r2-r1的绝对值相同,那么1步就能到达。
    程序如下:

    #include<bits/stdc++.h>
    using namespace std;
    int P,r1,c1,r2,c2;
    int main()
    {
    	cin>>P>>r1>>c1>>r2>>c2;
    	if(r1==r2&&c1==c2)
    	{
    		cout<<0;
    		return 0;
    	}
    	if(abs(c2-c1)==abs(r2-r1))
    	{
    		cout<<1;
    		return 0;
    	}
    	if(abs(c2-c1)%2==abs(r2-r1)%2) cout<<2;
    	else cout<<-1;
    }
    
  • 相关阅读:
    Unity3D性能优化之资源导入标准和属性设置篇
    博客主题-Next风格
    Pytorch 搭建 LeNet-5 网络
    CIFAR数据集解读
    Mnist数据集解读
    博客主题——cnbook
    博客主题——element v2
    更换清华镜像源
    图像插值技术——双线性插值法
    PASCAL VOC2012数据集解读
  • 原文地址:https://www.cnblogs.com/2021-yanghaoran/p/11585620.html
Copyright © 2020-2023  润新知