题意
题解
线段,相交,可以建立一个不等式:
转化一下:
都是变量,那么由欧几里得扩展可知:存在时,。至此,问题转化为在区间,寻找一个值使得。如果是枚举区间内的数,复杂度会炸。稍微思考一下,不需要枚举整个区间的数,考察和。令,那么可以解得:
代码
- #include <bits/stdc++.h>
- using namespace std;
-
- int la, ra, ta, lb, rb, tb;
-
- int main()
- {
- cin >> la >> ra >> ta >> lb >> rb >> tb;
-
- if (la > lb) {
- swap(la, lb);
- swap(ra, rb);
- swap(ta, tb);
- }
-
- int g = __gcd(ta, tb);
- int k = (lb - la) / g;
- int l = ra - la;
-
- int ans = 0;
- ans = max(ans, min(la + g * k + l, rb) - max(la + g * k, lb) + 1);
-
- k++;
- ans = max(ans, min(la + g * k + l, rb) - max(la + g * k, lb) + 1);
-
- cout << ans << endl;
- return 0;
- }