Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมนับจำนวนเมทริกซ์ Humble ขนาด n x m ใน Python

เมทริกซ์ Humble ขนาด n x m ต้องมีตัวเลข 1..n*m ทุกตัวโดยไม่ซ้ำ และสอดคล้องเงื่อนไข: หาก (i1+j1) < (i2+j2) แล้ว Mat[i1][j1] < Mat[i2][j2] หาจำนวนเมทริกซ์ที่เป็นไปได้ โมดุลอ 10^9+7

ตัวอย่าง: n=2, m=2 → 2 เมทริกซ์

ขั้นตอนการแก้ปัญหา

จำนวนเมทริกซ์ Humble = ∏_{i=1}^{min(n,m)} (i!)^2 * (min(n,m)!)^{|n-m|}

  1. คำนวณแฟกทอเรียล modulo p ล่วงหน้าจนถึง 10^6
  2. ให้ m ≤ n (สลับถ้าจำเป็น)
  3. คำนวณผลคูณตามสูตร

ตัวอย่างโค้ด Python

MOD = 10**9 + 7

def solve(n, m):
    max_fact = 10**6
    fact = [1] * (max_fact + 1)
    for i in range(2, max_fact + 1):
        fact[i] = fact[i-1] * i % MOD
    if m > n:
        n, m = m, n
    prod = 1
    for x in range(1, m):
        prod = prod * fact[x-1] % MOD
        prod = prod * prod % MOD
    for _ in range(n - m + 1):
        prod = prod * fact[m-1] % MOD
    return prod

# ทดสอบ
n = 3
m = 3
print(solve(n, m))  # ผลลัพธ์: 24

อินพุตตัวอย่าง

3, 3

เอาต์พุตตัวอย่าง

24