কম্পিউটার

আমরা দুটি তালিকাকে একত্রিত করতে পারি এমন সংখ্যক উপায় খুঁজে বের করার জন্য প্রোগ্রাম যাতে পাইথনে অর্ডার পরিবর্তন না হয়


ধরুন আমাদের দুটি তালিকা আছে nums1 এবং nums2। এখন প্রতিবন্ধকতা হল যখন আমরা প্রতিটি তালিকার উপাদানগুলির ক্রম একত্রিত করি তখন পরিবর্তন হয় না, উদাহরণস্বরূপ, যদি উপাদানগুলি [1,2,3] এবং [4,5,6] হয়, তাহলে কিছু বৈধ মার্জ করা তালিকা হল [1, 4,2,3,5,6] এবং [1,2,3,4,5,6], কিছু অন্য বৈধ মার্জ ক্রম থাকতে পারে। তাই যদি আমাদের তালিকার আকার থাকে N এবং M। বৈধ তালিকা পেতে আমাদেরকে কতগুলো উপায় খুঁজে বের করতে হবে। উত্তরটি খুব বড় হলে রিটার্ন ফলাফল মডিউল 10^9 + 7।

সুতরাং, যদি ইনপুটটি N =5 M =3 এর মত হয়, তাহলে আউটপুট হবে 56

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • ret :=1
  • N + 1 থেকে N + M রেঞ্জের মধ্যে
  • জন্য,
      করুন
    • ret :=ret * i
  • আমি 1 থেকে M রেঞ্জের জন্য, কর
    • ret :=r/i এর ফ্লোর
  • রিটার্ন মোড (10^9 + 7)

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

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))

ইনপুট

5, 3

আউটপুট

56

  1. পাইথনে দুটি প্রদত্ত লিঙ্কযুক্ত তালিকার মিলন খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে টার্গেট পেতে আমরা কতগুলো উপায় খুঁজে বের করতে পারি?

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

  4. পাইথন প্রোগ্রাম দুটি তালিকার ছেদ খুঁজে বের করতে?