কম্পিউটার টিউটোরিয়াল

পাইথনে দুটি লিস্ট মার্জ করার উপায়ের সংখ্যা যেখানে অর্ডার বদল না যায়

দুটি লিস্ট nums1 এবং nums2 দেওয়া আছে। মার্জ করার সময় প্রতিটি লিস্টের এলিমেন্টের অর্ডার বদলাবে না। যেমন [1,2,3] এবং [4,5,6] হলে বৈধ মার্জড লিস্ট: [1,4,2,3,5,6] এবং [1,2,3,4,5,6]। লিস্টগুলোর সাইজ N এবং M হলে কতভাবে সেগুলো মার্জ করা যায় তা বের করতে হবে। উত্তর বড় হলে ১০⁹+৭ দিয়ে মডুলো করুন।

উদাহরণ

ইনপুট: N = 5, M = 3

আউটপুট: 56

সমাধান পদ্ধতি

  1. ret := 1
  2. i = N+1 থেকে N+M পর্যন্ত:
    • ret := ret * i
  3. i = 1 থেকে M পর্যন্ত:
    • ret := ret // i (ইন্টিজার ডিভিশন)
  4. ret % (10⁹ + 7) রিটার্ন করুন।

এটি বিনোমিয়াল কোইফিশিয়েন্ট C(N+M, M) বা C(N+M, N) ক্যালকুলেট করে।

পাইথন ইমপ্লিমেন্টেশন

def solve(N, M):
    ret = 1
    for i in range(N + 1, N + M + 1):
        ret *= i
    for i in range(1, M + 1):
        ret //= i
    return ret % (10**9 + 7)

# টেস্ট
N = 5
M = 3
print(solve(N, M))  # আউটপুট: 56

ইনপুট

5, 3

আউটপুট

56
  1. পাইথনে দুটি সর্টেড লিংকড লিস্টের ইউনিয়ন বের করার প্রোগ্রাম

  2. পাইথনে সিম্বল अरেঞ্জ করে টার্গেট পাওয়ার উপায়ের সংখ্যা বের করার প্রোগ্রাম

  3. পাইথনে এনকোডেড মেসেজ ডিকোড করার উপায়ের সংখ্যা খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে দুটি লিস্টের ইন্টারসেকশন (Intersection) বের করা