传送门:题目
题意:
有两个点,一个起点 (x1,y1) ( x 1 , y 1 ) ,一个终点 (x2,y2) ( x 2 , y 2 ) ,然后告诉你走的四种方式,问能否通过有限次的走,最终从起点到达终点。
题解:
第一开始想用DFS模拟走的过程,然后发现写崩了。谷歌了一下,发现只要中间减起点,然后除以走的方式,能整除且满足倍数同奇或同偶,就一定可以到达。仔细想一下就可以理解了:
一开始
x2−x1modx=0
x
2
−
x
1
mod
x
=
0
,就是不考虑y,单独看一维x坐标,能不能到达。
然后
y2−y1mody=0
y
2
−
y
1
mod
y
=
0
,就是不考虑x,单独看一维y坐标,能不能到达。
为什么可以由二维降到一维?因为你把题目中的四个公式两两组合,你会发现:可以在x不动的前提下移动y,可以在y不动的前提下移动x
然后奇偶判断,就是同时考虑x和y。因为两两组合才能降维,所以必须同奇或同偶
AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#define INF 0x3f3f3f3f
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
int x_start, y_start, x_end, y_end, x, y;
cin >> x_start >> y_start >> x_end >> y_end >> x >> y;
int xt = abs(x_start - x_end);
int yt = abs(y_start - y_end);
if ( xt % x == 0 && yt % y == 0 && (xt / x) % 2 == (yt / y) % 2)
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}