链接: Gym101964
题意:
给出一个分成 N ( 2 ≤ N ≤ 2 32 ) N\,(2\le N\le 2^{32}) N(2≤N≤232)个刻度的钟,钟上有 3 3 3个长度分别为 A , B , C A,B,C A,B,C的指针,指针都指向刻度,以针尖为三角形顶点,问一共能形成多少个包含圆心的不同三角形?(可以圆心在边上)
答案对
2
64
2^{64}
264取余。
分析:
分析当三指针长度不同时的情况:
若
N
N
N为偶数,答案为
n
∗
(
2
∗
∑
i
=
2
n
2
i
+
n
−
2
)
n*(2*\displaystyle\sum_{i=2}^{\frac{n}{2}}i+n-2)
n∗(2∗i=2∑2ni+n−2);
若
N
N
N为奇数,答案为
n
∗
(
2
∗
∑
i
=
1
⌊
n
2
⌋
i
)
n*(2*\displaystyle\sum_{i=1}^{\lfloor\frac{n}{2}\rfloor}i)
n∗(2∗i=1∑⌊2n⌋i);
所以,当三根指针长度均相同时,答案要除以 3 ! 3! 3!,当三根指针中有两根长度相同时,要除以 2 ! 2! 2!。
有除法取余不便,直接上python。
代码:
def cal(n):
if(n%2 == 0):
return n*((2+n//2)*(n//2-1)+(n-2))
else:
return n*((1+n//2)*(n//2))
MOD = 2**64
a,b,c,n = map(int,input().split(" "))
if(a != b and a != c and b != c):
print(cal(n) % MOD)
elif(a == b and b == c):
print(cal(n)//6 % MOD)
else:
print(cal(n)//2 % MOD)