造一造
題目:
https://ac.nowcoder.com/acm/problem/15077
每次你可以入棧一個新元素或者當棧非空時出棧一個元素, n n n個元素必須依次入棧,而 W Y F WYF WYF希望其中第 m m m個元素入棧之後,棧中恰好有 k k k個元素,現在他想知道一共有多少種入棧出棧順序滿足這個條件。
思路:
首先分成兩個子問題
- 在第
m
m
m個元素入棧之前,有
m
−
1
m-1
m−1個入棧,
m
−
k
m-k
m−k個出棧,並且每一時刻入棧的個數不少於出棧的個數,方案為
( 2 m − 1 − k m − 1 ) k m {2m-1-k\choose m-1}\frac{k}{m} (m−12m−1−k)mk - 在第
m
m
m個元素入棧之後,還有有
n
−
m
n-m
n−m個入棧,
n
−
m
+
k
n-m+k
n−m+k個出棧,並且每一時刻出棧的個數減入棧的個數小於等於
k
k
k(棧裡已經有
k
k
k個元素),方案數為
( 2 n − 2 m + k n − m ) k + 1 n − m + k + 1 {2n-2m+k\choose n-m}\frac{k+1}{n-m+k+1} (n−m2n−2m+k)n−m+k+1k+1
答案就是兩式相乘
注意: 算組合數有不合法的情況
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
using namespace std;
const int N=4000009;
int T;
ll p[N],p1[N];
ll qpow(ll a, ll b){
ll res=1;
a%=mod;
while(b){
if(b&1)
res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
ll cal(ll a,ll b){
if(a<0||b<0||a-b<0)//不合法
return 0;
return p[a]*p1[b]%mod*p1[a-b]%mod;
}
int main() {
p[0]=1;
for(int i=1;i<N;i++)
p[i]=p[i-1]*i%mod;
p1[N-1]=qpow(p[N-1],mod-2);
for(int i=N-2;i>=0;i--)
p1[i]=p1[i+1]*(i+1)%mod;
cin>>T;
while(T--){
ll n,m,k,tmp,tmp1;
cin>>n>>m>>k;
tmp=cal(2*m-1-k,m-1)*k%mod*qpow(m,mod-2)%mod;
tmp1=cal(2*n-2*m+k,n-m)*(k+1)%mod*qpow(n-m+k+1,mod-2)%mod;
cout<<tmp*tmp1%mod<<endl;
}
return 0;
}
相關文章
- 造芯”熱為何一定要造芯
- 造芯”熱 為何一定要造芯
- 自己造一個ReactDOMReact
- 造輪子-strace(一)
- 造一個「輪子」musionUIUI
- 「智造」第1期:鍛造行業智慧製造規劃行業
- Java--構造器和構造方法Java構造方法
- 兩化融合|智慧製造|製造強國
- 【智慧製造】製造業智慧變革之道
- 【智慧製造】智慧製造將勢不可擋
- 【智慧製造】機器人與智慧製造機器人
- 詢問(構造,一種新思路)
- 構造器
- 造資料
- 構造方法構造方法
- 創造力
- 中國製造2025主攻方向是智慧製造
- 【智慧製造】智慧製造的核心——智慧決策
- 【智慧製造】智慧製造流派 全球11種智慧製造參考模型大盤點!模型
- C++ 建構函式實戰指南:預設構造、帶引數構造、複製構造與移動構造C++函式
- 中國量子技術創造多個世界第一,又創造世界首個
- 【智慧製造】PTC:智造新主線,兩化新模式模式
- 【智慧製造】從世界級製造到工業4.0
- 【智慧製造】當資料智慧遇上工業製造
- 【智慧製造】奔向智慧製造;什麼樣的人能引領工廠智慧製造發展?
- CF 構造題
- java構造器Java
- AUTOCAD——構造線
- 智慧製造控制
- 造輪子-ThreadPoolExecutorthread
- 構造方法20201202構造方法
- 「勒索」製造業
- 構造有理數~
- 造輪子 -- RxRouter
- 以智慧製造推進製造業智慧化轉型
- 日曆(設計構造器與預設構造器)
- 閉門造車的蘋果,究竟在造什麼車?蘋果
- 【智慧製造】工業軟體:智慧製造的大腦