第一行输入两个正整数。
第二行输入个正整数
,代表小美拿到的数组。
一个整数,代表删除的方案数。
5 2 2 5 3 4 20
4
第一个方案,删除[3]。
第二个方案,删除[4]。
第三个方案,删除[3,4]。
第四个方案,删除[2]。
import sys def count_factor(num, factor): cnt = 0 while num % factor == 0: cnt += 1 num = num // factor return cnt def main(): n, k = map(int, sys.stdin.readline().split()) arr = list(map(int, sys.stdin.readline().split())) two = [] five = [] for num in arr: two.append(count_factor(num, 2)) five.append(count_factor(num, 5)) pre_two = [0] * (n + 1) pre_five = [0] * (n + 1) for i in range(n): pre_two[i + 1] = pre_two[i] + two[i] pre_five[i + 1] = pre_five[i] + five[i] sum2 = pre_two[n] sum5 = pre_five[n] target2 = sum2 - k target5 = sum5 - k if target2 < 0&nbs***bsp;target5 < 0: print(0) return res = 0 l = 0 for r in range(1, n + 1): while l < r and (pre_two[r] - pre_two[l] > target2&nbs***bsp;pre_five[r] - pre_five[l] > target5): l += 1 res += r - l print(res) if __name__ == "__main__": main()
n, k = map(int, input().split()) li = list(map(int, input().split())) numli = [] for x in li: t = x a = b = 0 while t % 2 == 0&nbs***bsp;t % 5 == 0: if t % 2 == 0: t //= 2 a += 1 if t % 5 == 0: b += 1 t //= 5 numli.append((a, b)) # print(numli) sm2 = [0] * (n + 1) # 求2的数量的前缀和 sm5 = [0] * (n + 1) for i in range(1, n + 1): sm2[i] = sm2[i - 1] + numli[i - 1][0] sm5[i] = sm5[i - 1] + numli[i - 1][1] # print(sm2) # print(sm5) i= 0 j = 0 res = 0 while i < n + 1: while j < n + 1: a2 = sm2[-1] - sm2[j] + sm2[i] a5 = sm5[-1] - sm5[j] + sm5[i] if min(a2, a5) < k: break j += 1 if i >= j: break res += j - 1 - i i += 1 print(res)