ধরুন আমাদের Mটি ভিন্ন এক্সপ্রেশন আছে, এবং এই এক্সপ্রেশনগুলোর উত্তর ১ থেকে N (ইনক্লুসিভ) রেঞ্জে আছে। ধরুন x = max(f(i)) প্রতিটি i রেঞ্জ ১ থেকে N এর জন্য, আমাদের x-এর এক্সপেক্টেড ভ্যালু বের করতে হবে।
উদাহরণস্বরূপ, যদি ইনপুট M = 3, N = 3 হয়, তবে আউটপুট হবে 2.2 কারণ:
| Sequence | Maximum frequency |
|---|---|
| 111 | 3 |
| 112 | 2 |
| 113 | 2 |
| 122 | 2 |
| 123 | 1 |
| 133 | 1 |
| 222 | 3 |
| 223 | 2 |
| 233 | 2 |
| 333 | 3 |
$$E(x) = \sum P(x) * x = P(1) + 2P(2) + 3P(3) = \frac{1}{10} + 2 * \frac{6}{10} + 3 * \frac{3}{10} = \frac{22}{10}$$
সমাধানের ধাপসমূহ
combination := {}- মেমোরাইজেশন용 맵nCr()ফাংশন ডিফাইন করুন যাn, k_inনেবেk := min(k_in, n - k_in)- বেস কেস হ্যান্ডল করুন
- মেমোরাইজেশন ব্যবহার করে কম্বিনেশন ক্যালকুলেট করুন
- মেইন মেথড থেকে:
arr := []for k in range 2 to M+1: ইনক্লুশন-এক্সক্লুশন প্রিন্সিপল ব্যবহার করে কাউন্ট করুনtotal := arr[-1]diff := [arr[0]] + [arr[cnt+1] - arr[cnt] for cnt in range(M-1)]output := sum(diff[cnt] * (cnt+1) / total for cnt in range(M))outputরিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝার জন্য:
combination = {}
def nCr(n, k_in):
k = min(k_in, n - k_in)
if n < k or k < 0:
return 0
elif (n, k) in combination:
return combination[(n, k)]
elif k == 0:
return 1
elif n == k:
return 1
else:
a = 1
for cnt in range(k):
a *= (n - cnt)
a //= (cnt + 1)
combination[(n, cnt + 1)] = a
return a
def solve(M, N):
arr = []
for k in range(2, M + 2):
a = 1
s = 0
for i in range(M // k + 2):
if M < i * k:
break
s += a * nCr(N, i) * nCr(N - 1 + M - i * k, M - i * k)
a *= -1
arr.append(s)
total = arr[-1]
diff = [arr[0]] + [arr[cnt + 1] - arr[cnt] for cnt in range(M - 1)]
output = sum(diff[cnt] * (cnt + 1) / total for cnt in range(M))
return output
M = 3
N = 3
print(solve(M, N))
ইনপুট
3, 3
আউটপুট
2.2