luoguP1641 [SCOI2010]生成字符串 组合
可以将问题抽象成选 1 就向右走,选 0 就向上走,且不能经过 y=x+1 的方案数.
考虑容斥:总-不合法.
总方案数就是 $\binom{n+m}{n}$,然后不合法的方案数对于 y=x+1 对称后发现就是 $(-1,1)$ 走到 $(n,m)$ 的方案数.
code:
#include <bits/stdc++.h>
#define N 2000009
#define ll long long
#define mod 20100403
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int fac[N],inv[N];
void init() {
fac[0]=1;
for(int i=1;i<N;++i) fac[i]=(ll)fac[i-1]*i%mod;
inv[1]=1;
for(int i=2;i<N;++i) inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
for(int i=2;i<N;++i) inv[i]=(ll)inv[i]*inv[i-1]%mod;
inv[0]=1;
}
int C(int x,int y) {
return (x<0||y<0||x<y)?0:(ll)fac[x]*inv[y]%mod*inv[x-y]%mod;
}
int main() {
// setIO("input");
int n,m;
init();
scanf("%d%d",&n,&m);
printf("%d\n",(ll)(C(n+m,n)+mod-C(n+m,n+1))%mod);
return 0;
}

浙公网安备 33010602011771号