#牛客春招刷题训练营# + 链接
首先将问题分解为 \型对角线 加上 /型对角线,这两条线是有交点的,但需要注意交点有可能不在边界
交点不在边界时,最终个数是其中一条个数的两倍;交点在边界时,最终个数是其中一条个数的两倍再减1
于是可以只分析 \型对角线,此时通过约分 a 和 b 的最大公约数 g 继续分解为子问题
新的 a' b' 互质后,显然有个数=(a'+1)+(b'+1)-2=a'+b' ,且与 x y 均无关
(水平边上a'+1个,竖直边上b'+1个,减去最外面2个重复的端点)
然后扩大 g 倍,也就是去掉右下角的点复制 g 遍,再加回右下角的点,(a'+b'-1)*g+1
最后把 g 乘进去就不需要 a' b' 了
#include <bits/stdc++.h> using namespace std; int main() { int a, b, x, y; cin >> a >> b >> x >> y; int g = __gcd(a, b); /* int aa = a/g, bb = b/g; int xx = (aa+bb-1)*g + 1; */ int xx = (a+b-g)+1; cout << xx*2-(a%2==0||b%2==0) << endl; return 0; }