您的位置:首页 > 其它

51Nod-1650-穿越无人区

2017-12-09 00:57 155 查看
ACM模版

描述



题解

由:

|x+y|≡0 mod (2∗a) |x−y|≡0 mod (2∗b)

可得,

x+y=n∗(2∗a) x−y=m∗(2∗b)

此时,画一下图就很容易发现,沼泽都是连在一起的,并且都是对角线,两个公式,一个是主对角线组,一个是副对角线组,由于 a 和 b 的不同导致对角线密度不同,进而可以发现,最少经过的沼泽地等于起点和终点的主副对角线跨越条数最多的那个。

可能描述不是特别清晰,画一下图大概就能懂了。这个题是规律题,属于只要弄清楚样例就一定可以 AC 的题,放在 5 级题有些夸张了,导致有的人想多了。

代码

#include <iostream>
#include <cmath>

using namespace std;

typedef long long ll;

int main()
{
double a, b, x1, x2, y1, y2;

while (~scanf("%lf%lf%lf%lf%lf%lf", &a, &b, &x1, &y1, &x2, &y2))
{
int n = abs(ceil((x1 + y1) / (2 * a)) - ceil((x2 + y2) / (2 * a)));
int m = abs(ceil((x1 - y1) / (2 * b)) - ceil((x2 - y2) / (2 * b)));
printf("%d\n", max(n, m));
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  规律 数学相关