SCOI2010 生成字串

2022-05-23 21:24:13 字數 545 閱讀 6373

乙個廣為流傳的$trick$,然而我現在才學會。

題面題解在任意的前k個字元中,1的個數必須大於等於0的個數。

我們把放乙個$1$視為向右走一步,放乙個$0$視為向上走一步,現在答案就轉換為從$(0,0)$開始,走到$(n,m)$,並且不能跨越$y=x$,有多少種方案數。

對於不合法的方案數:如果經過了$y=x+1$,我們就把它右下角的部分沿此直線翻摺,這樣就變成了從$(-1,1)$走到$(n,m)$的方案數,不難發現這樣是一一對應的(從$(-1,1)$到任意乙個終點都需要跨越$y=x+1$)。所以這個問題的答案就是$c_^-c_^$。

#include#include

#include

#define ri register int

#define mod 20100403

using

namespace

std;

intn,m;

int pow(int a,int

b) int c(int n,int

m) int

main()

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 生成字串

給定n,m,求乙個包含n個1,m個0,且任何字首的1的數量必須大於0的數量的合法01串的數量,答案對20100403取模。我們建立座標系,定義x座標為1和0的數量的和,y座標表示1和0的數量的差,那麼向右上走就表示選擇1,向右下走就表示選擇0。如果不考慮限制條件,那麼我們要從 0,0 走到 n m,...