• HDU多校第五场--1012/6825 SET1(组合数+概率


    题意:http://acm.hdu.edu.cn/showproblem.php?pid=6825

    每次选出最小数删除,并任选一个数删除,问 i 球可以留下的概率

    思路:

    大概是这个意思

     1 ll inv(ll b){return b==1||b==0?1:(mod-mod/b)*inv(mod%b)%mod;}
     2 ll f[N];
     3 ll C(ll n,ll m){
     4     return f[n]*inv(f[m])%mod*inv(f[n-m])%mod;
     5 }
     6 void init()
     7 {
     8     f[0]=1;
     9     for(int i=1;i<N;i++)
    10         f[i]=f[i-1]*i%mod;
    11 }
    12 
    13 int _[N],er[N],__[N];
    14 
    15 ll qpow(ll a,ll b,ll mod)
    16 {
    17     ll ans;
    18 //    a%=mod;
    19     ans=1;
    20     while(b!=0)
    21     {
    22         if(b&1)
    23             ans=(ans*a)%mod;
    24         b/=2;
    25         a=(a*a)%mod;
    26     }
    27     return ans;
    28 }
    29 
    30 void solve()
    31 {
    32     int n;
    33     sc("%lld",&n);
    34     for(int i=1;i<=n/2;++i)pr("0%c"," 
    "[i==n]);
    35     pr("%lld%c",_[n/2]*qpow(__[n/2],mod-2,mod)%mod," 
    "[n==1]);
    36     for(int i=n/2+2;i<=n;++i)
    37     {
    38         int x=i-1;
    39         int y=n-i;
    40         int k=(x-y)/2;
    41         pr("%lld%c",_[2*k]*C(x,y)%mod*_[y]%mod*qpow(er[k]*_[k]%mod,mod-2,mod)%mod*qpow(__[n/2],mod-2,mod)%mod," 
    "[i==n]);
    42     }
    43 }
    44 
    45 signed main()
    46 {
    47     init();
    48     _[0]=1;
    49     er[0]=1;
    50     __[0]=1;
    51     int tt=0;
    52     for(int i=1;i<N;++i)
    53         tt+=2,_[i]=_[i-1]*i%mod,er[i]=er[i-1]*2%mod,__[i]=__[i-1]*tt%mod;
    54 //    cout<<3*qpow(8,mod-2,mod)%mod<<endl;
    55     int T;
    56     sc("%lld",&T);
    57     while(T--)solve();
    58     return 0;
    59 }
  • 相关阅读:
    BZOJ4569 : [Scoi2016]萌萌哒
    2016浙江省赛过山车记
    BZOJ4546(原) : 三元组
    BZOJ4539 : [Hnoi2016]树
    BZOJ4537 : [Hnoi2016]最小公倍数
    BZOJ4538 : [Hnoi2016]网络
    BZOJ4527 : K-D-Sequence
    BZOJ4504 : K个串
    BZOJ4471 : 随机数生成器Ⅱ
    BZOJ3659 : Which Dreamed It
  • 原文地址:https://www.cnblogs.com/--HPY-7m/p/13435226.html
Copyright © 2020-2023  润新知