小粉兔喜欢下象棋吗

[语言月赛 202308] 小粉兔喜欢下象棋吗

题目描述

在中国象棋中,马走日字形。用 ( i , j ) (i,j) (i,j) 表示第 i i i 行第 j j j 列的格点,不考虑别马腿,考虑跳出棋盘外,在 ( i , j ) (i,j) (i,j) 的马可以跳到 ( i − 2 , j + 1 ) (i-2,j+1) (i2,j+1) ( i − 2 , j − 1 ) (i-2,j-1) (i2,j1) ( i − 1 , j + 2 ) (i-1,j+2) (i1,j+2) ( i − 1 , j − 2 ) (i-1,j-2) (i1,j2) ( i + 1 , j + 2 ) (i+1,j+2) (i+1,j+2) ( i + 1 , j − 2 ) (i+1,j-2) (i+1,j2) ( i + 2 , j + 1 ) (i+2,j+1) (i+2,j+1) ( i + 2 , j − 1 ) (i+2,j-1) (i+2,j1) 八个位置。

将军抽车是中国象棋中常用的进攻策略。如下图所示,此时红帅在 ( 1 , 5 ) (1,5) (1,5),红车在 ( 2 , 8 ) (2,8) (2,8)。若黑马跳到红框位置所指的 ( 3 , 6 ) (3,6) (3,6),帅将由于被将军被迫移动,此时,马就可以吃掉红车。

本题将解决将军抽车的简化版问题。在本题中,将军抽车就是要通过一步跳马,在能够将军的同时将车置于马的攻击位置。

只考虑棋盘上有红帅、红车、黑马各一枚的情况,不考虑帅是否可以通过移动实现对车的保护,不考虑别马腿,在当前局面,轮到黑棋移动时,黑马是否可以通过一步移动,在不出界的情况下,实现将军抽车?

输入格式

输入共三行。

输入的第一行为两个整数 S x , S y S_x,S_y Sx,Sy,表示红帅的位置为 ( S x , S y ) (S_x,S_y) (Sx,Sy)

输入的第二行为两个整数 C x , C y C_x,C_y Cx,Cy,表示红车的位置为 ( C x , C y ) (C_x,C_y) (Cx,Cy)

输入的第三行为两个整数 M x , M y M_x,M_y Mx,My,表示黑马的位置为 ( M x , M y ) (M_x,M_y) (Mx,My)

保证红帅在 1 ∼ 3 1 \sim 3 13 行的九宫格内。

输出格式

输出一行一个字符串:

  • 若可以实现将军抽车,输出 Yes
  • 若不可以实现将军抽车,输出 No

样例 #1

样例输入 #1

1 5
2 8
5 5

样例输出 #1

Yes

样例 #2

样例输入 #2

1 5
2 9
5 5

样例输出 #2

No

提示说明

数据规模与约定

对于 100 % 100\% 100% 的测试数据, 1 ≤ S x ≤ 3 1 \le S_x \le 3 1Sx3 4 ≤ S y ≤ 6 4 \le S_y \le 6 4Sy6 1 ≤ C x , M x ≤ 10 1 \le C_x,M_x \le 10 1Cx,Mx10 1 ≤ C y , M y ≤ 9 1 \le C_y,M_y \le 9 1Cy,My9。保证没有任意两枚棋子初始时处于同一位置。

代码内容

// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
ll dx[9]={0,-2,-2,-1,-1,1,1,2,2};
ll dy[9]={0,1,-1,2,-2,2,-2,1,-1};

int main()
{
    ll sx,sy;
    cin>>sx>>sy;

    ll cx,cy;
    cin>>cx>>cy;

    ll mx,my;
    cin>>mx>>my;

    ll res=0;
    for(ll i=1;i<=8;i++)
    {
        ll x,y;
        x=mx+dx[i];
        y=my+dy[i];
        if(x>=1&&y>=1&&x<=9&&y<=9)
        {
            if(x!=sx&&y!=sy&&x!=cx&&y!=cy)
            {
                if(abs(x-sx)+abs(y-sy)==3)
                {
                    if(abs(x-cx)+abs(y-cy)==3)
                        res=1;
                }
            }
        }
    }

    if(!res)
        cout<<"No"<<endl;
    else
        cout<<"Yes"<<endl;

    return 0;
}
  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pretty Boy Fox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值