国王

小T自幼学习中国象棋,小学时曾荣获龙城小学象棋比赛冠军,他对中国象棋情有独 钟,外出参加信息学夏令营等活动时都要随身携带一副中国象棋,一有空就会摆开棋跟小 伙伴们杀上几盘。自从在小学编程班上听了国际象棋的起源传说后,小T又对神秘的国际 象棋产生了浓厚兴趣,由于学习任务繁重并且课余时间还要用来编写程序,小 T 一直没有 机会学习国际象棋,前不久小 T 通过自主招生提前考上了心仪已久的 CZ 中学创新实验班, 一举摆脱了中考的烦恼,自主招生面试一结束小 T 立马到龙城棋院买了一副国际象棋,一 进家门就迫不及待地摆开了,小 T 首先学习的是国王的走法,国际象棋棋盘由 8 行 8 列的 64   个方格组成,如下图中的左图所示,棋子是放在方格中的,这一点跟中国象棋有着很大 的区别,国王可移动至八个邻近方格中的任意一个,如下图中的右图所示,只要不掉到棋 盘外面即可,图中的黑色实心圆代表国王,八个白色的空心圆代表国王一步能走到的位置。 小T想知道国王从棋盘上的一个格子到达另一个格子至少需要走几步?
输入
输入数据共有两行,每行包含两个用空格隔开的不超过 8 的正整数,
第一行的两个数 R1,C1 表示国王初始时的位置在第 R1 行第 C1 列,
第二行的两个数 R2,C2 表示国王要走到 的目标位置在第 R2 行第 C2 列。
输出
输出数据仅有一行包含一个整数表示国王从棋盘上的初始位置走到目标位置至少需 要走几步?
样例输入 Copy
1 2
8 8
样例输出 Copy
7
提示
样例解释
样例中国王(上图中用“王”表示)初始时在棋盘上的第 1 行第 2 列,要走到棋盘右下
角的方格即第 8 行第 8 列,小 T 只要第一步将国王向下移一格走到第 2 行第 2 列,然后一 直沿斜线向右下方向连续走 6 步即可到达目标位置,图中将国王走过的位置用 1~7 依次 标出来了,总共需要走 7 步,可以验证其它走法都不可能少于 7 步。
数据范围
20%的数据满足:国王的初始位置和目标位置在同一行或同一列
30%的数据满足:R1<R2,C1<C2
100%的数据满足:1≤R1,R2,C1,C2≤8
 
#include "bits/stdc++.h"
#define hhh printf("hhh\n")
#define see(x) (cerr<<(#x)<<'='<<(x)<<endl)
using namespace std;
typedef long long ll;
typedef pair<int,int> pr;
inline int read() {int x=0,f=1;char c=getchar();while(c!='-'&&(c<'0'||c>'9'))c=getchar();if(c=='-')f=-1,c=getchar();while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return f*x;}

const int maxn = 1e7+7;
const int inf = 0x3f3f3f3f;
const int mod = 1e8+7;
int main()
{
    int x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    int sum1=abs(x1-x2);
    int sum2=abs(y1-y2);
    int count=0;
    int flag=0;
    while(sum1||sum2){
        if(sum1){
            sum1--;
            count++;
            flag=1;
        }
        if(sum2){
            sum2--;
            if(flag==0){
                count++;
            }
        }
        flag=0;
    }
    printf("%d",count)+;
    return 0;
}

 

posted @ 2020-01-04 23:56  哎呦哎(iui)  阅读(872)  评论(0编辑  收藏  举报