传送门:I题
题意: 一个时钟,时针走一圈就是一天,现在给定时针走一圈要H小时,分针走一圈要M分钟,设
α
=
2
π
A
H
M
α=\frac{2πA}{HM}
α=HM2πA ,求一天中时针和分针夹角小于等于α的时刻有几次。
这题首先有如下几个注意点:
①分针是按照刻度一格一格走的,因此不能将小数的分钟算入,必须是整的(即不能按照角度来求)。
②两者成角度会有两种情况,分针在时针左边成角度 or 在时针右边成角度

切入点: 一般会最先想到用追及问题的角度去做,但是这样就有两个变量(涉及到分针和时针两个对象),所以我们可以选择将时针作为参照物 (参照物静止不动),运用相对速度只对分针这一个对象做分析。
两者绝对速度:
v
h
绝
对
v_{h绝对}
vh绝对 =
2
π
H
M
\frac{2π}{HM}
HM2π ,
v
m
绝
对
v_{m绝对}
vm绝对 =
2
π
M
\frac{2π}{M}
M2π ,
分针相对速度:
v
m
相
对
=
v
m
绝
对
−
v
h
绝
对
=
2
π
H
M
∗
(
H
−
1
)
=
(
H
−
1
)
v
h
绝
对
v_{m相对}=v_{m绝对}-v_{h绝对}=\frac{2π}{HM}*(H-1)=(H-1)v_{h绝对}
vm相对=vm绝对−vh绝对=HM2π∗(H−1)=(H−1)vh绝对,
即分针相对于时针以
H
−
1
/
m
i
n
H−1 / min
H−1/min 的恒定速度运动。
要使两者之间夹角小于等于α,也就相当于追及问题中的两针“路程差”≤α,而此处因为时针作为参照物了,所以也就转化成了分针的“路程”≤α=
2
π
A
H
M
=
A
∗
v
h
绝
对
\frac{2πA}{HM}=A*v_{h绝对}
HM2πA=A∗vh绝对
因此我们可以写出一个关于时间
t
∈
[
0
,
H
M
)
t∈[0,HM)
t∈[0,HM) 的不等式:
t
∗
*
∗(H-1)
v
h
绝
对
v_{h绝对}
vh绝对 mod HM ≤ |α|=|A
∗
v
h
绝
对
*v_{h绝对}
∗vh绝对|
t
∗
*
∗(H-1) mod HM ≤ |
A
A
A|
根据剩余系定理三:
“若a,b,c为任意3个整数,m为正整数,且(m,c)=1,则当ac≡bc(mod m)时,有a≡b(mod m)”
所以为了满足互质,可将不等式两边同除以
g
=
g
c
d
(
H
−
1
,
H
M
)
g=gcd(H-1,HM)
g=gcd(H−1,HM) ,不等式可等价为:
t
∗
*
∗
H
−
1
g
\frac{H-1}{g}
gH−1 mod
H
M
g
\frac{HM}{g}
gHM ≤ |
A
g
\frac{A}{g}
gA|
−
A
g
\frac{-A}{g}
g−A ≤ t
∗
*
∗
H
−
1
g
\frac{H-1}{g}
gH−1 mod
H
M
g
\frac{HM}{g}
gHM ≤
A
g
\frac{A}{g}
gA
------------注意:此处t的取值范围也同时从 [ 0 , HM ) 缩小到 [ 0 ,
H
M
g
\frac{HM}{g}
gHM )-----------
下面就只需求解出 t 的整数解的个数,即为满足条件的时刻的次数。我画在数轴上会比较直观。只需求出正半轴有几个整数解,然后个数
∗
*
∗ 2并且加上零解。

正半轴:因为要mod之后余数≤
A
g
\frac{A}{g}
gA ,因此一共有余数为1,2,3…
A
g
\frac{A}{g}
gA 的共计
A
g
\frac{A}{g}
gA 个解,并且这些解中没有重复的,即t的值与余数取值一 一对应,下证:
令a=
H
−
1
g
\frac{H-1}{g}
gH−1,b=
H
M
g
\frac{HM}{g}
gHM
假设存在
t
1
t_1
t1和
t
2
t_2
t2两个不同的值满足:
t
1
∗
a
t_1*a
t1∗a mod
b
b
b ≡
t
2
∗
a
t_2*a
t2∗a mod
b
b
b ,并且
t
∈
[
0
,
b
]
t∈[0,b]
t∈[0,b] ,因此根据同余定义,易证
t
1
=
t
2
t_1=t_2
t1=t2 ,与假设矛盾,因此每个t的解所对应的余数一定是各不相同的。
所以在 t∈[ 0 , H M g \frac{HM}{g} gHM ) 的范围内一共有 2 ∗ ( A g ) + 1 2*(\frac{A}{g})+1 2∗(gA)+1 个不同整数解。把范围还原到 [ 0 , HM ) ,就共有 g ∗ [ 2 ∗ ( A g ) + 1 ] g*[2*(\frac{A}{g})+1] g∗[2∗(gA)+1] 个不同整数解,也就是本题答案之一。
有一种情况需要特判,就是当 A = H M 2 A=\frac{HM}{2} A=2HM ,这时α=π ,t ∈ [ 0 , HM )中的每个整数都满足条件,故答案为 H M HM HM
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll h,m,a;
int main()
{
scanf("%lld%lld%lld",&h,&m,&a);
ll g=__gcd(h-1,h*m);
if(a==h*m/2) printf("%lld",h*m);
else printf("%lld",g*(2*(a/g)+1));
return 0;
}