मान लीजिए हमारे पास दो मान n और m हैं। हमें क्रम n x m के विनम्र मैट्रिक्स की संभावित व्यवस्थाओं की संख्या खोजनी है। एक मैट्रिक्स को विनम्र कहा जाता है जब:
- इसमें 1 से n x m तक का प्रत्येक तत्व ठीक एक बार होता है
- किसी भी दो इंडेक्स जोड़े (i1, j1) और (i2, j2) के लिए, यदि (i1 + j1) < (i2 + j2), तो Mat[i1, j1] < Mat[i2, j2] होना चाहिए।
यदि उत्तर बहुत बड़ा है तो परिणाम मॉड 10^9 + 7 लौटाएं।
तो, यदि इनपुट n = 2, m = 2 है, तो आउटपुट 2 होगा, क्योंकि दो संभावित मैट्रिक्स हैं -
| 1 | 2 |
| 3 | 4 |
और
| 1 | 3 |
| 2 | 4 |
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- p := 10^9+7
- result := मान 1 वाली एक सूची
- x को 2 से 10^6 तक की रेंज में, करें
- temp := result का अंतिम तत्व
- temp :=(temp*x) mod p
- temp को result के अंत में डालें
- यदि m > n, तो
- temp := n
- n := m
- m := temp
- prod := 1
- x को 1 से m तक की रेंज में, करें
- prod :=(prod * result[x-1]) mod p
- prod := (prod^2) mod p
- x को 0 से n - m तक की रेंज में, करें
- prod := (prod * result[m-1]) mod p
- prod लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
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