C-初中数学
原创
©著作权归作者所有:来自51CTO博客作者wx58438afac3cd5的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述
Problem Description
有一个无限大的二维坐标系,一开始你在(a,b)位置,你有两块魔法石,上面分别刻着x和y。
当你在坐标(a,b)时,你可以进行以下四种操作的其中一种:
你可以进行无限次操作,问最后是否有可能到达坐标(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;
}