ধরুন আমাদের দুটি মান আছে n এবং m। আমাদের n x m ক্রম বিনম্র ম্যাট্রিসের সম্ভাব্য বিন্যাসের সংখ্যা খুঁজে বের করতে হবে। একটি ম্যাট্রিক্সকে নম্র বলা হয় যখন
- এতে 1 থেকে n x m পরিসরের প্রতিটি উপাদান ঠিক একবার থাকে
- যেকোন দুটি সূচক জোড়ার জন্য (i1, j1) এবং (i2, j2), যদি (i1 + j1) <(i2 + j2), তাহলে Mat[i1, j1]
উত্তরটি খুব বড় হলে ফলাফল মোড 10^9 + 7 ফেরত দিন।
সুতরাং, যদি ইনপুটটি n =2 m =2 এর মত হয়, তাহলে আউটপুট হবে 2, কারণ দুটি সম্ভাব্য ম্যাট্রিক্স আছে -
1 | 2 |
3 | 4 |
এবং
1 | 3 |
2 | 4 |
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- p :=10^9+7
- ফলাফল :=মান 1 সহ একটি তালিকা
- 2 থেকে 10^6 রেঞ্জের x এর জন্য, করুন
- temp :=ফলাফলের শেষ উপাদান
- temp :=(temp*x) mod p
- ফলাফলের শেষে তাপমাত্রা ঢোকান
- যদি m> n হয়, তাহলে
- তাপ :=n
- n :=m
- m :=temp
- prod :=1 1 থেকে m রেঞ্জের x-এর জন্য
- করুন
- prod :=(prod * ফলাফল[x-1]) mod p
- prod :=(prod^2) mod p
0 থেকে n - m রেঞ্জের x-এর জন্য - করুন
- prod :=(prod * ফলাফল[m-1]) mod p
- প্রত্যাবর্তন পণ্য
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
p = 10**9+7 def solve(n, m): result = [1] for x in range(2,10**6+1): temp = result[-1] temp = (temp*x) % p result.append(temp) if(m > n): temp = n n = m m = temp prod = 1 for x in range(1,m): prod = (prod * result[x-1]) % p prod = (prod**2) % p for x in range(n-m+1): prod = (prod*result[m-1]) % p return prod n = 3 m = 3 print(solve(n, m))
ইনপুট
3, 3
আউটপুট
24