链接:https://ac.nowcoder.com/acm/contest/61132/E 来源:牛客网 已知有n个动物朋友排成一排,每个动物朋友都有一个正整数的快乐值,涛涛每次会和连续的动物朋友玩,并且获得这些动物朋友快乐值的和的快乐,而涛涛是个完美主义者,他觉得快乐值刚好是m时候才是快乐的,现在请问有多少种选择方式,使得所选的连续的动物朋友的快乐值刚好为m。 输入描述: 第一行输入n(1<=n<=1e6)和m(1<=m<=1e6)。 第二行输入n个正整数,第i个代表第i个动物朋友的快乐值。(1<=ai<=1e5) 输出描述: 一个整数,表示可能存在的选法数量,如果没有,就输出0;
时间: 2024-04-13 22:26:34 浏览: 245
这个问题可以通过使用前缀和来解决。首先,我们计算出每个位置的前缀和,即从第一个动物到当前动物的快乐值总和。然后,我们遍历每个位置,假设当前位置为结束位置,然后找到起始位置使得从起始位置到结束位置的快乐值总和等于给定的m。我们可以使用双指针来找到这样的起始位置和结束位置。如果找到了一个起始位置,使得从起始位置到结束位置的快乐值总和等于m,则计数器加1。最后,输出计数器的值。
下面是代码的示例实现:
```python
def count_choices(n, m, happiness):
prefix_sum = [0] * (n + 1)
for i in range(1, n + 1):
prefix_sum[i] = prefix_sum[i - 1] + happiness[i - 1]
count = 0
left, right = 0, 1
while right <= n:
if prefix_sum[right] - prefix_sum[left] == m:
count += 1
left += 1
right += 1
elif prefix_sum[right] - prefix_sum[left] < m:
right += 1
else:
left += 1
return count
# 读取输入
n, m = map(int, input().split())
happiness = list(map(int, input().split()))
# 调用函数并输出结果
result = count_choices(n, m, happiness)
print(result)
```
这段代码首先读取输入的n和m,然后读取n个动物朋友的快乐值。接下来,调用`count_choices`函数来计算可能的选择方式的数量,并将结果输出。
希望这可以帮到你!如果还有其他问题,请随时提问。
阅读全文