C. Ela and Crickets codeforces1737C

Problem - 1737C - Codeforces

题目大意:给出一个n*n的跳棋棋盘,棋盘上有三个跳棋,被摆成L型且彼此相邻,给出一个点的坐标,问能否有跳棋到达该点,

思路:首先,L型的棋子肯定可以走遍两个棋子所在的一整个横行或一整个竖列,然后在同一行的两个棋子移动一个后,另一个棋子可以斜向移动,这样就成了一个与之前L的拐点对称的L,之后我们不难发现,通过这样的方式,棋子可以走遍每个以L型拐点为中心的九宫格的中间十字,下图中有五角星的格子即为左上三个棋子能到达的所有格子。特别的是,如果L的拐点恰好在棋盘的一角,因为不能斜向走,所以只能走到拐点所在的那一行或那一列

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int n, x1 = 0, y1 = 0;
		scanf("%d", &n);
		int tempx, tempy;
		scanf("%d%d", &tempx, &tempy);
		bool flagx = 0, flagy = 0;
		for (int i = 1; i <= 2; i++)
		{//找出L的拐点,横坐标出现两次,纵坐标出现两次的点就是拐点
			int x, y;
			scanf("%d %d", &x, &y);
			if (x==tempx)
			{
				x1 =x;
				flagx = 1;
			}
			if (i == 2 && flagx == 0)
			{
				x1 = x;
			}
			if (y == tempy)
			{
				y1 = y;
				flagy = 1;
			}
			if (i == 2 && flagy == 0)
			{
				y1 = y;
			}
		}
		int x, y;
		scanf("%d %d", &x, &y);
		if ((x1 == 1 && (y1 == 1 || y1 == n)) || (x1 == n && (y1 == n || y1 == 1)))
		{//拐点是否在墙角
			if (x == x1 || y == y1)
			{//拐点在墙角只能走那一行或那一列
				cout << "YES" << endl;
			}
			else
			{
				cout << "NO" << endl;
			}
		}
		else
		{
			if (x % 2 != x1 % 2 && y % 2 != y1 % 2)
			{//检查询问的点是否在以拐点为中心的十字上
				cout << "NO" << endl;
			}
			else
			{
				cout << "YES" << endl;
			}
		}
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

timidcatt

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

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

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

打赏作者

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

抵扣说明:

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

余额充值