騰訊益智小遊戲 矩陣計數

2021-09-24 02:45:13 字數 1413 閱讀 8284

遊戲中給出乙個 n \times mn×m 的矩陣,若其中填入的內容是數字 1 \sim n \times m1∼n×m 的排列,求問有多少種不等價的矩陣?

等價矩陣:若乙個矩陣 aa 可以通過交換其中兩行或者兩列變成另乙個矩陣 bb,則稱 aa 和 bb 等價。且若 aa 和 bb等價,bb 和 cc 等價,則 aa 和 cc 也等價。

答案對 998244353998244353 取模。

當你計算乙個答案需要對某大質數取模的問題時,加減乘都是可以中途取模的,例如 (a+b+c)\%mod(a+b+c)%mod 可以改為 ((a+b)\%mod+c)\%mod((a+b)%mod+c)%mod,這樣可以防止運算溢位,而結果不變,注意,當你需要計算除法時,譬如計算 (a/b)\%mod(a/b)%mod,也許 aa 和 bb 本身很大很大,但是經過取模後變成乙個相對較小的數,這裡再這麼算是不對的,比如 mod=7mod=7 時,30/1030/10 的結果本來是 33,但是 aa 和 bb 對 77 取模後變成了 2/32/3,直接計算得到 00,就產生了錯誤,你可以使用下面的**中 invinv 函式,當你需要計算 a/b\%moda/b%mod 時可以改寫成 (a\%mod)*inv(b \% mod)\%mod(a%mod)∗inv(b%mod)%mod,前提是 bb 不為 00(在模 modmod 後不為 00),注意資料溢位問題,你可能需要使用 long long 型別。inv 函式的複雜度為 \mathcal(\log mod)o(logmod)。

long long inv(long long x) 

x = x * x % mod;

b >>=1;

}return ans;

}

一行兩個正整數 nn 和 mm,空格隔開。

乙個正整數,表示答案對 998244353998244353 取模的結果。

n,m \le 2000n,m≤2000

樣例輸入1複製

1 2
樣例輸出1複製

1
樣例輸入2複製

2 2
樣例輸出2複製

6
樣例輸入3複製

3 3
樣例輸出3複製

10080
做法是:n*m的全排(階乘)除以 (n的全排*m的全排)

注意應用題目中的函式方法

#include using namespace std;

const int mod = 998244353;

long long inv(long long x)

return ans;

}int solve(int a)

return ans;

}int main()

騰訊益智小遊戲 矩陣計數

當你計算乙個答案需要對某大質數取模的問題時,加減乘都是可以中途取模的,例如 a b c mod a b c 可以改為 a b mod c mod,這樣可以防止運算溢位,而結果不變,注意,當你需要計算除法時,譬如計算 a b mod a b 也許 a 和 b 本身很大很大,但是經過取模後變成乙個相對較...

益智小遊戲 Python 四

本文參考自力扣題目 給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。以下是leecode官方解答 妙啊!給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 w,h 出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個...

益智小遊戲 Python 五

本文參考自力扣題目 請你僅使用兩個棧實現先入先出佇列。佇列應當支援一般佇列的支援的所有操作 push pop peek empty 實現 myqueue 類 void push int x 將元素 x 推到佇列的末尾 int pop 從佇列的開頭移除並返回元素 int peek 返回佇列開頭的元素 ...