二面题目之前缀和应用

松鼠分松果

题目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)

你可能感兴趣的:(python)