題目描述
lxhgww最近接到了乙個生成字串的任務,任務需要他把n個1和m個0組成字串,但是任務還要求在組成的字串中,在任意的前k個字元中,1的個數不能少於0的個數。現在lxhgww想要知道滿足要求的字串共有多少個,聰明的程式設計師們,你們能幫助他嗎?
輸入輸出格式
輸入格式:
輸入資料是一行,包括2個數字n和m
輸出格式:
輸出資料是一行,包括1個數字,表示滿足要求的字串數目,這個數可能會很大,只需輸出這個數除以20100403的餘數
輸入輸出樣例
輸入樣例#1: 複製
2 2輸出樣例#1: 複製
2雲端評測
標籤各省省選
2010
四川高效能
難度省選/noi-
時空限制
1000ms / 128mb
思路:考慮從(0,0)出發的路徑;
選1時 x+1,y+1;
選0時 x+1,y-1;
那麼滿足約束條件時應該是不能走到
y=-1的線下面;即求上述的方案數;
直接求肯定很困難,考慮間接求解;總的方案數為c(n+m,n),那麼不合法的方案數是多少呢?顯然------不合法自然就是穿過 y = -1 的方案數,那麼試著將 y=-1 的翻轉下去,可以發現就是num_1 +1 ,num_0 -1 ,此時的方案數就是 c(n+m,n+1)
答案就是 c(n+m,n)-c(n+m,n+1) ;
lucas處理即可;
#include #include #include using namespace std;
typedef long long ll;
#define mod 20100403
ll mod_pow(ll x, ll n, ll p)
return res;}
ll comb(ll n, ll m, ll p)
return ret;}
ll lucas(ll n, ll m, ll p)
int main()
return 0;
}
SCOI2010 生成字串
題目大意 給出n個 1 m個 0 求用這些組成的串中,滿足 前k個字元中1數不小於0數 的串的個數。對20100403取模 同學互測題出了原題,當時蒙蔽。除了一眼看出的dp dp i j dp i 1 j dp i j 1 然後就是持續蒙蔽。最後同學講題,講了乙個非常nb的構造演算法 將串想象成乙個...
SCOI2010 生成字串
oj題號 bzoj1856 洛谷1641 思路 總方案數為 binom 非法方案數為 binom 則合法方案數為 n m 1 frac 其中除以 m 可以用乘以逆元實現,邊乘邊模。因為要求出1 m的連續的逆元,所以可以線性推。另外注意中間結果和最終乘積可能會超過int範圍,所以要轉long long...
SCOI2010 生成字串
乙個廣為流傳的 trick 然而我現在才學會。題面題解在任意的前k個字元中,1的個數必須大於等於0的個數。我們把放乙個 1 視為向右走一步,放乙個 0 視為向上走一步,現在答案就轉換為從 0,0 開始,走到 n,m 並且不能跨越 y x 有多少種方案數。對於不合法的方案數 如果經過了 y x 1 我...