前言
看到这题已经有很多题解了,但感觉证明不是很详细,所以我以不太标准的写法写了自己的思路,写的不好勿喷
题面
40分思路
本质即为小学奥数的相遇&追及问题
相遇次数为:
ans_1=\frac{\frac{t \times (v_1+v_2)}{l}+1}{2}
追及次数为:
ans_2=\frac{\frac{t \times (v_1-v_2)}{l}+1}{2}
好,自信,提交!
ok,ACWA!
100分思路
why?
当然是因为会有重复情况出现
样例 1 中:5 2 3 10 就是个例子
相遇时 t=1,3,5,7,9
追及时 t=5
发现当 t=5 时被统计了两次,且此时刚好在同一端点上
所以,我们要对端点特别计算,减去这些重复部分
设时间为 t
因为是两只蛙都在端点上,所以 t 要满足:
((v_1 \times t) \bmod l=0) \&\& ((v_2 \times t) \bmod l=0)
不拿发现只有在 t=\frac{l}{\gcd(v_1,v_2)} 时才有重叠情况
假设 速度为 v_1 的青蛙(以下用甲表示)跑了 cnt_1 圈,速度为速度为 v_2 的青蛙(以下用乙表示)跑了 cnt_2 圈
那么
((v_1 \times t) \bmod l=0) \&\& ((v_2 \times t) \bmod l=0)
可得
\because cnt1 \times l = v_1 \times t
\therefore cnt1 = \frac{v_1}{\gcd(v_1,v_2)}
\because cnt2 \times l = v_2 \times t
\therefore cnt2 = \frac{v_2}{\gcd(v_1,v_2)}
这时会有 2 种情况:
1.在同一端点
这时才是真重叠
由于甲乙分别从左右出发
所以当且仅当二者所行圈数奇偶不同时,才会在同一端点相遇
即
(cnt_1\&1) \neq (cnt_2\&1)
注意:\& 运算优先级较低
2.不在同一端点
与1反之
综上,记重叠部分为 ans_3,当重叠部分在同一端点时
ans_3=\frac{\frac{t \times \gcd(v_1,v_2)}{l}+1}{2}
代码
AC代码不放了,核心代码就2行