[Scoi2010]字符串(数形结合+组合数学+逆元)

题意:传送门

题解:参考博客:传送门

根据上面博客可知最后使用总方案数-不合法方案数:

C\binom{n}{n+m}-C\binom{n+1}{n+m}

C\binom{y}{x}=x!/((x-y)!*y!)

对于除法的取余,采用求逆元中的费马小定理进行求解即可。

附上代码:


#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll mod=20100403;

ll n,m;

ll quick_mod(ll a,ll p)
{
    ll ans=1;
    a=a%mod;
    while(p){
        if(p&1){
            ans=ans*a%mod;
        }
        p>>=1;
        a=a*a%mod;
    }
    return ans%mod;
}

ll C(ll x,ll y)
{
    ll a=1;
    for(ll i=1;i<=x;i++){
        a=a*i%mod;
    }
    ll b=1;
    for(ll i=1;i<=x-y;i++){
        b=b*i%mod;
    }
    ll c=1;
    for(ll i=1;i<=y;i++){
        c=c*i%mod;
    }
    b=(b*c)%mod;
    ll mu=quick_mod(b,mod-2);
    return (a*mu)%mod;
}

int main()
{
    scanf("%lld%lld",&n,&m);
    printf("%lld\n",(C(n+m,n)-C(n+m,n+1)+mod)%mod);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhouzi2018/article/details/86478132