• 【BashuOJ1145】虚-组合数+求逆元


    测试地址:
    题目大意:在一个数轴上走,一开始在原点,每秒有1/4概率向左走一个单位,有1/4概率向右走一个单位,有1/2概率不动,问t秒后走到坐标p的概率,对109+7取模。
    做法:这一套题,三道题我只会做第一道,好气啊!
    (顺带一提,这三题题目拼音合起来是xu yi miao…你们这样都是要负责的)
    这一题可以用组合数学中母函数的思想来想,不懂什么是母函数的同学可以去查。这里我们可以求t秒后走到各个位置概率的数列的母函数。首先,根据题目中的条件,可以写出1秒后走到各位置概率的母函数:14x1+12x0+14x1,可以看到xp项的系数就是走到位置p的概率。利用母函数的特性,t秒后走到各位置概率的母函数就是(14x1+12x0+14x1)t,也就等于122t((x0+x1)2x)t。我们把原式乘上一个xt,那么剩下的式子就可以很容易地求某一项的系数了,需要注意的是,原来我们要求xp项的系数,而乘上xt后,我们要求的系数就变成xp+t的系数了,那么我们要求的答案显然就是:Cp+t2t/22t。利用扩展欧几里得求逆元就可以求出对应的组合数求模的解了。
    当然你也可以不用看上面这些废话,官方的题解是把每秒拆成两秒,每秒有1/2概率向左移动,有1/2概率向后移动,这种方式和原题中的移动方式等价,最后也可以推出答案。
    以下是本人代码:

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define ll long long
    #define mod 1000000007
    using namespace std;
    ll t,p,f[200010];
    
    void exgcd(ll a,ll b,ll &x,ll &y)
    {
        ll x0=1,x1=0,y0=0,y1=1;
        while(b)
        {
            ll q,tmp;
            q=a/b;
            tmp=x0-q*x1,x0=x1,x1=tmp;
            tmp=y0-q*y1,y0=y1,y1=tmp;
            tmp=a%b,a=b,b=tmp;
        }
        x=x0,y=y0;
    }
    
    ll inv(ll x)
    {
        ll a,b;
        exgcd(x,mod,a,b);
        return ((a%mod)+mod)%mod;
    }
    
    ll C(ll n,ll m)
    {
        if (m>n||m<0) return 0;
        ll ans=f[n];
        ans=(ans*inv(f[m]))%mod;
        ans=(ans*inv(f[n-m]))%mod;
        return ans;
    }
    
    ll power(ll a,ll b)
    {
        ll s=1,ss=a;
        while(b)
        {
            if (b&1) s=(s*ss)%mod;
            b>>=1;ss=(ss*ss)%mod;
        }
        return s;
    }
    
    int main()
    {
        scanf("%lld%lld",&t,&p);
        f[0]=1;
        for(ll i=1;i<=2*t;i++)
            f[i]=(f[i-1]*i)%mod;
    
        ll ans;
        ans=C(2*t,p+t);
        ans=(ans*inv(power(2,2*t)))%mod;
        printf("%lld",ans);
    
        return 0;
    }
    
  • 相关阅读:
    Checking Types Against the Real World in TypeScript
    nexus pip proxy config
    go.rice 强大灵活的golang 静态资源嵌入包
    几个golang 静态资源嵌入包
    rpm 子包创建学习
    Rpm Creating Subpackages
    ava 类似jest snapshot 功能试用
    ava js 测试框架基本试用
    The Architectural Principles Behind Vrbo’s GraphQL Implementation
    graphql-compose graphql schema 生成工具集
  • 原文地址:https://www.cnblogs.com/Maxwei-wzj/p/9793617.html
Copyright © 2020-2023  润新知