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 级题有些夸张了,导致有的人想多了。
描述
题解
由:|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; }
相关文章推荐
- 支付宝,15年穿越“无人区”
- 穿越无人区
- 51Nod1650 穿越无人区
- 徒步穿越神农架无人区
- 穿越宇宙的邀请函——镜像图片技巧
- 51nod 1163 最高的奖励 【贪心 ,并查集】
- 51nod 1719 数值计算
- 51nod 1050 循环数组最大子段和 !!!!巧妙
- 51NOD 1523 非回文
- 51nod 1444 破坏道路 最短路
- [暴力 乱搞] 51Nod 1616 算法马拉松19 B 最小集合
- 51nod 1582 n叉树 dp+矩阵乘法
- 51NOD 区间的价值 V2
- 51nod 1611 金牌赛事&&cf115E [线段树]
- 51nod 1616 最小集合
- 51Nod 1110 距离之和最小 V3(中位数+权值转化为个数)
- 51nod-1451 合法三角形
- 51nod 1785 数据流中的算法 (方差计算公式)
- 51nod 1015 水仙花数
- 51Nod 1116 K进制下的大数