题目描述:
qwq
题目分析:
跟字符串毛的关系都没有
考虑把问题映射到二维平面里
设选1为(1,1),选0为(1,-1)
那么终点即为 (n+m,n-m)
不考虑限制,辣么答案即为C(n+m,m)
考虑限制
限制即为在移动的过程中不能碰到Y=-1
从(0,0)走到(n+m,n-m)犯规的方案数
其实就等于从(0,-2)走到(n+m,n-m)的方案数
逆元用费马小定理即可
题目链接:
Ac 代码:
// luogu-judger-enable-o2
#include <cstdio>
#include <iostream>
#include <cstring>
#define ll long long
ll num[2000010];
const int mod=20100403;
void pre()
{
num[0]=1;
for(int i=1;i<=2000001;i++) num[i]=(num[i-1]*i)%mod;
}
ll fastpow(ll x,int y)
{
ll ans=1;
x%=mod;
for(;y;y>>=1,x=(x*x)%mod)
if(y&1) ans=(ans*x)%mod;
return ans;
}
ll C(int n,int m)
{
ll z=num[n]*fastpow(num[m],mod-2)%mod;
return z*fastpow(num[n-m],mod-2)%mod;
}
int main()
{
pre();
int n,m;
scanf("%d%d",&n,&m);
printf("%lld\n",(C(n+m,m)-C(n+m,m-1)+mod)%mod);
return 0;
}