Giả sử chúng ta có hai giá trị n và m. Chúng ta phải tìm số cách sắp xếp có thể có của ma trận nhỏ bậc n x m. Ma trận được cho là khiêm tốn khi
- Nó chứa mỗi phần tử trong phạm vi từ 1 đến n x m đúng một lần
- đối với hai cặp chỉ số bất kỳ (i1, j1) và (i2, j2), nếu (i1 + j1) <(i2 + j2), thì Mat [i1, j1]
Nếu câu trả lời quá lớn thì trả về kết quả mod 10 ^ 9 + 7.
Vì vậy, nếu đầu vào là n =2 m =2, thì đầu ra sẽ là 2, vì có thể có hai ma trận -
1 | 2 |
3 | 4 |
Và
1 | 3 |
2 | 4 |
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- p:=10 ^ 9 + 7
- kết quả:=một danh sách có giá trị 1
- đối với x trong phạm vi từ 2 đến 10 ^ 6, thực hiện
- temp:=phần tử cuối cùng của kết quả
- temp:=(temp * x) mod p
- chèn tạm thời vào cuối kết quả
- nếu m> n, thì
- tạm thời:=n
- n:=m
- m:=temp
- prod:=1
- đối với x trong phạm vi từ 1 đến m, thực hiện
- prod:=(prod * result [x-1]) mod p
- prod:=(prod ^ 2) mod p
- đối với x trong phạm vi từ 0 đến n - m, thực hiện
- prod:=(prod * result [m-1]) mod p
- sản phẩm trả lại
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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))
Đầu vào
3, 3
Đầu ra
24