เมทริกซ์ 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|}
- คำนวณแฟกทอเรียล modulo p ล่วงหน้าจนถึง 10^6
- ให้ m ≤ n (สลับถ้าจำเป็น)
- คำนวณผลคูณตามสูตร
ตัวอย่างโค้ด 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