計數 (快速冪 逆元 組合數學隔板法)

2021-10-01 12:24:46 字數 1251 閱讀 5484

計數時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

小sun最近對計數問題來了興趣,現在他有乙個問題想問問你:

有乙個含有n個數字的序列,每個數的大小是不超過1000的正整數,同時這個序列是個單調不增序列。但是很不幸的是,序列在儲存過程中有些數字丟失了,請你根據上述條件,計算出有多少種不同的序列滿足上述條件,答案對1000000007取模。(具體可以看樣例)

第一行包含乙個整數n,表示這個序列的長度。

第二行為n個整數aia_iai​,用空格隔開,如果數字是0,代表這個數字丟失了,其他的數字都在1~1000之間

輸出一行,表示答案。
示例1

複製

3

9 0 8

複製

2
示例2

複製

2

5 4

複製

1
示例3

複製

3

0 0 0

複製

167167000
1≤n≤1e61\leq n \leq 1e61≤n≤1e6

0≤ai≤10000\leq a_i \leq 10000≤ai​≤1000

#include#define ll long long

#define mod 1000000007

using namespace std;

int t;

int a[1000006];

ll a[1000006],inv[1000006];

ll quick_mi(ll x,ll y)//快速冪求逆元 inv

return res;

}ll c(ll n,ll m)//組合數

int main()

a[0]=1; //!!!

inv[0]=1;//!!! 特殊處理

for(int i=1;i<=1000000;i++)//階乘預處理範圍

ll ans=1;

int num=0;

int last=1000;

for(int i=0;ielse num++;

} ans=ans*c(last-1+num,num)%mod;

printf("%lld\n",ans);

}

組合數學 隔板法

隔板法在排列組合中的應用技巧 張紅兵在排列組合中,對於將不可分辨的球裝入到可以分辨的盒子中而求裝入方法數的問題,常用隔板法。例1.求方程的正整數解的個數。分析 將10 個球排成一排,球與球之間形成 9個空隙,將兩個隔板插入這些空隙中 每空至多插一塊隔板 規定由隔板分成的左 中 右三部分的球數分別為x...

組合數學 隔板法

隔板法是組合數學裡面乙個非常重要的解決一類問題的方法,一定要掌握。一類問題 把 n 個元素分成 b 組的方案數,n 個元素相同。這類問題我們常用隔板法解決,即在 n 個元素之間插入 b 1 個板,把他們分成 b 組。分兩種 1 如果分成的每個組都必須有元素的話,那麼答案就是 c n 1,b 1 2 ...

扔硬幣 (逆元 組合數學)

有n枚硬幣,每枚硬幣扔出來是正面和反面的概率各佔50 小明同時扔下了n枚硬幣後,已知至少有m枚硬幣是反面。請問恰好有k枚硬幣是正面的概率是多少。輸入t,代表有t組資料。每組資料輸入乙個數n,m,k,代表有n枚硬幣,丟擲以後至少有m枚是反面的情況下,恰好有k個正面的概率。t 1000,n 1e5,m ...