解题思路

1. 前缀和计算:首先,我们需要计算所有卡片数字的前缀和,以便快速计算任意连续k张卡片的和。

2. 枚举所有可能的连续k张卡片:对于每一对连续的k张卡片,计算它们的和,并判断平均值是否在l和r之间。

3. 计算期望值:对于每一对满足条件的连续k张卡片,计算其对应的概率,并将所有概率相加得到期望值。

代码实现

```python
def gcd(a, b):
while b:
a, b = b, a % b
return a
def get_prefix_sum(cards):
prefix_sum = [0] (len(cards) + 1)
for i in range(len(cards)):
prefix_sum[i + 1] = prefix_sum[i] + cards[i]
return prefix_sum
def get_probability(cards, l, r, k):
prefix_sum = get_prefix_sum(cards)
count = 0
for i in range(len(cards) - k + 1):
for j in range(i + 1, len(cards) - k + 2):
sum_k = prefix_sum[j] - prefix_sum[i]
avg = sum_k / k
if l < avg < r:
count += 1
return count / (len(cards) - k + 1) 2

def get_expectation(cards, l, r, k):
probability = get_probability(cards, l, r, k)
if probability == 0 or probability == 1:
return probability
else:
numerator = probability
denominator = 1
g = gcd(int(numerator 100), int(denominator 100))

numerator //= g
denominator //= g
return f