摘要:n = int(input)s = input.striptotal_sum = sum(int(c) for c in s)target = total_sum % 3prefix_sum = [0] * (n + 1)for i in range(1, n
n = int(input)s = input.striptotal_sum = sum(int(c) for c in s)target = total_sum % 3prefix_sum = [0] * (n + 1)for i in range(1, n+1): prefix_sum[i] = prefix_sum[i-1] + int(s[i-1])from collections import defaultdictremainder_map = defaultdict(int)remainder_map[0] = 1 # 前缀和为0的情况res = 0for r in range(1, n+1): current_remainder = prefix_sum[r] % 3 # 寻找满足 (prefix_sum[r] - prefix_sum[l-1]) % 3 == target 的l required_remainder = (current_remainder - target) % 3 res += remainder_map.get(required_remainder, 0) remainder_map[current_remainder] += 1# 加上不删除的情况(如果本身就是3的倍数)if target == 0: res += 1print(res) 来源:凌菲教育
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!