在牛客裡我已經不是第一次遇到求組合數了,但是由於組合數cn
m是好久之前學的,遇到題目時就懵了…… 具體格式:cn
m=n!/((n-m)!*m!),希望能夠通過本次解析題目加深對組合數的理解。
牛客網題目鏈結
該題我認為唯一的難點就是p的取值範圍太大,不可以單純用變數來儲存p的值。因為題目輸出要求並不高,只要判斷cn
m與p是否相等。我們可以採用輸入類(string)p再用字串化整數、分步求餘的方式一步一步轉換為能夠被變數儲存的數值a,再通過分步求餘的方式將cn
m求出b,問題變成判斷a與b的數值是否相等。
ac**:
#include
using namespace std;
#define ll long long
const
int mod=
1e9+7;
//將輸入轉換為類
//再通過分步求餘的方式得到大小合適的sum
//sum=n!/(m!*(n-m)!)
//sum*(n-m)!=n!=sum1
intmain()
本題很簡單,關鍵就是思維要清晰:找出問題關鍵 (cn
m與p是否相等—轉換—a與b是否相等)。
我一開始做這道題時,只想到將cn老鐵的關注是鼓勵我寫部落格的最大動力~
牛客挑戰賽30 A 小G數數
思路 先考慮中間b,c的情況,bac,我們先找出所有滿足b,c的情況並存到陣列裡,注意陣列大小 然後,對於每對b,c,求出可以的aa和ad數量,相乘得到針對這對b,c的所有可能 然後所有結果相加。如下 include include include include include include i...
牛客挑戰賽30 A 小G數數
給你乙個1 n的排列a1,a2.ana1,a2.an,問有多少個四元組 a,b,c,d 滿足a b c d且aa示例1 複製4 1 3 2 4複製 1思路 這道題暴力也可做出來,夠毒瘤的,不過暴力是不夠的,應該用dp,定義f i j 表示第j個位置比i小的數的數量,然後雙迴圈遍歷陣列。include...
牛客挑戰賽30D 小A的昆特牌(組合數學)
傳送門 很容易寫出乙個暴力 sum r 即列舉選了多少個步兵,然後用插板法算出方案數 我們對這個換一種角度考慮,可以看做是從 0,0 走到 s,n m 且必須經過 l,n r,n 這條直線的方案數 這個就等價於第 l 步向右走時縱座標在 0,n 1 的方案數減去第 r 1 步向右走時在 0,n 1 ...