松鼠分松果
题目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rt9uCZDq-1669217901082)(https://gitee.com/sansejindeyihan/images/raw/master/image-20221123232240435.png)]
解决思路
- 利用前缀和得到前缀和数组
- 对前缀和数组对松鼠个数进行取余操作
- 在得到的取余数组索引为0处加一个0元素
- 统计取余数组中各个元素出现的次数
- 对统计后的各个次数进行n*(n-1)/2操作并累加即为答案
bunch = int(input())
part_num = input()
numbers = int(input())
part_num = [eval(i) for i in part_num.split(' ')]
sum_part_num = []
for i in range(len(part_num)):
if i == 0:
sum_part_num.append(part_num[i])
else:
sum_part_num.append(part_num[i] + sum_part_num[i-1])
quyu = []
for i in sum_part_num:
quyu.append(i % numbers)
quyu.insert(0,0)
set_quyu = set(quyu)
list_quyu = list(set_quyu)
ans = 0
for i in list_quyu:
m = quyu.count(i)
ans += m*(m-1)/2
ans = int(ans)
print(ans)