题目描述

Problem Description

有一个无限大的二维坐标系,一开始你在(a,b)位置,你有两块魔法石,上面分别刻着x和y。
当你在坐标(a,b)时,你可以进行以下四种操作的其中一种:

C-初中数学_ios

C-初中数学_曼哈顿距离_02

C-初中数学_算法_03

C-初中数学_整除_04

你可以进行无限次操作,问最后是否有可能到达坐标(x1,y1)

Input

第一行给定a,b,x1,y1,
第二行给定x和y。
(-1e5<=a,b,x1,y1<=1e5,1<=x,y<=1e5)

Output

如果能够到达,输出YES,否则输出NO。

Sample Input

Test Case #1:
0 0 4 6
2 3
Test Case #2:
1 1 3 6
1 5

Sample Output

Test Case #1:
YES
Test Case #2:
NO

题目分析

首先,算出两点的曼哈顿距离,mod步长不为0的一定到不了(将最短路展开为x,y方向直线,步长不符合整除的无法到达)

这还没完,符合整除条件的还要继续分情况,因为每走一次,x和y的变化量是一一照应的,因此当x、y操作数之差为奇数(无法通过偶数次拐弯逆转)时,也是无法到达的。

AC Code

#include <bits/stdc++.h>
#define
using namespace std;

int a, b, tx, ty, dx0, dy0;
bool flag = false;

int main(){
IOF;
cin >> a >> b >> tx >> ty >> dx0 >> dy0;
int dx = abs(tx - a) / dx0, dy = abs(ty - b) / dy0;
if((a - tx) % dx0 || (b - ty) % dy0) cout << "NO" << endl;
else{
if(abs(dx - dy) % 2 != 0) cout << "NO" << endl;
else cout << "YES" << endl;
}
return 0;
}