二面题目之前缀和应用

松鼠分松果

题目

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值