[编程题]至
  • 热度指数:2278 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1024M,其他语言2048M
  • 算法知识视频讲解
\hspace{15pt}⭐我喜欢在雨天屋檐下追溯滞后的频率
\hspace{15pt}Bingbong 给定一个大小为 2\times n2n 列)的矩阵,我们使用 (i,j) 表示矩阵中从上往下数第 i 行和从左往右数第 j 列的位置,初始时每个位置都为空地。Bing 初始位于 (x_1,y_1),Bong 初始位于 (x_2,y_2),两个人的位置可以重复。
\hspace{15pt}他们每次移动会以向上、向下或者向右移动一个单元格,直到移动到终点 (2,n),前提是不能超出边界。

\hspace{15pt}一个位置若放置了障碍物,则无法进入。现在你可以在矩阵上放置任意数量的障碍物(也可以不放置障碍物),需要满足以下条件:
\hspace{23pt}\bullet\,两个人的初始位置和终点不得放置障碍物。
\hspace{23pt}\bullet\,两个人都至少存在一条路径可以到达 (2,n)
\hspace{23pt}\bullet\,使得 Bing 和 Bong 两个人移动到终点的最短路径长度相等。
\hspace{15pt}请判断是否存在满足条件的放置方法,若存在输出 \text{YES},否则输出 \text{NO}

输入描述:
\hspace{15pt}第一行输入一个整数 n \left(1\leqq n\leqq 10^5\right),表示矩阵的列长。 
\hspace{15pt}第二行输入两个整数 x_1,y_1 \left(1\leqq x_1\leqq 2;\ 1\leqq y_1\leqq n\right),表示 Bing 的起始位置。
\hspace{15pt}第三行输入两个整数 x_2,y_2 \left(1\leqq x_2\leqq 2;\ 1\leqq y_2\leqq n\right),表示 Bong 的起始位置。


输出描述:
\hspace{15pt}请判断是否存在满足条件的放置方法,若存在输出 \text{YES},否则输出 \text{NO}
示例1

输入

6
1 1
1 1

输出

YES
示例2

输入

6
1 1
1 2

输出

NO
头像 leleleeee
发表于 2025-12-20 17:17:28
首先我想说这道题真的很有意思,不过数据量稍微小了一些,所以我第一发水过去了,但是细想发现没这么简单,于是想了挺长时间写出了一发严谨的。我觉得经过思考大家应该都对这道题有一些理解。我就直接讲我的想法了。第一发ac我是思考了一会觉得只要距离相等,或者处于对角线(距离差2),就ok=true。然后ac了 展开全文
头像 wt函数格式不正确
发表于 2025-12-20 08:11:53
// 让我想起了小时候玩的那种2*n的推方块小游戏 // 让我们冷静地分情况讨论 // 1.如果两个人到终点的曼哈顿距离相等,那么肯定必定相等,不用放置障碍 /* 1.以上条件不满足,看看是否一个已经在终点了,如果是的话,那么另一个肯定追不上了 2.如果两个在同一条y=x+b的直线上,那么除 展开全文
头像 软件25_1张浩
发表于 2025-12-20 20:25:06
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ll n; cin >> n; //初始标记设为false,考虑true的情况。 bool 展开全文
头像 Jakeap
发表于 2025-12-20 12:06:16
直接分类讨论:题目不难哈,就只有数组两行,那么放障碍物也十分清晰。三种情况:第一种:坐标重合一定满足(无需障碍物)第二种:两个坐标呈现左下右上45度(无需障碍物)第三种:两个坐标呈现左上右下45度,这时需要障碍物将右边的第一个位置堵上,那右下位置只能走左上的路径了。注意第三种情况要处理特殊情况,注意 展开全文
头像 花碗
发表于 2025-12-20 15:54:28
先进行排序对每种情况进行分类讨论注意下形成对角线的的两种方式 #include <iostream> #include<algorithm> using namespace std; int main() { ios::sync_with_stdio(false); 展开全文
头像 周康禧
发表于 2025-12-20 23:11:51
两个人的最短路相同,因为只有两行,那么要么在同一个位置,要么刚好错开在不同的行,因为第一行到第二行(2,n)会比第二行的多一步,所以有一种就是(x1!=x2&&y1==y2+1) 然后另一种就是 让下面的右边防障碍,让它往上多一步,那么第一行的就在这个左边就行了(x1!=x2& 展开全文
头像 吐雾兔
发表于 2025-12-20 00:09:35
n = int(input()) x1, y1 = map(int, input().split()) x2, y2 = map(int, input().split()) # 计算无障碍物时到终点(2,n)的最短路径长度 def calc_shortest(x, y, n): if x 展开全文
头像 驴主
发表于 2025-12-20 00:55:05
import sys n = int(input()) a, b = map(int, input().strip().split()) c, d = map(int, input().strip().split()) yes = 'YES' no = 'NO' # 前两种情况 if a + 展开全文
头像 五毫升_
发表于 2025-12-20 01:31:10
#include <iostream> using namespace std; int main() { int n; cin>>n; int x1,x2,y1,y2; cin>>x1>>y1; cin> 展开全文
头像 YunBaichuan
发表于 2025-12-20 09:23:38
思路:分类讨论 代码: import sys input = lambda: sys.stdin.readline().strip() import math inf = 10 ** 18 def I(): return input() def II(): return int 展开全文