ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[MtOI2019]时间跳跃

2020-01-25 15:01:48  阅读:241  来源: 互联网

标签:5001 invfac int long MtOI2019 时间 跳跃 fac mod


$[MtOI2019]$时间跳跃

链接:https://www.luogu.com.cn/problem/P5615

题目描述:机关有$n$条秘密通道,第$i$条秘密通道的长度为$i$,机关会从所有选择方式种等概率随机选出一些秘密通道,如果选出来的这些秘密通道能组成一个凸多边形,那么这个方案的权值就是选出的秘密通道数量,否则权值为$0$。
那么请你求出选出来秘密通道的权值的期望。

题解:首先我们知道题目要求的是秘密通道的权值之和,这样才能算期望。

通过容斥可得:总共的$-$不合法的$=$要求的

总共的可以枚举选了多少个,拿组合数算,预处理阶乘逆元即可。

求不合法的,其实就是要求对于每一个数,和等于它的数列的大小之和,令两个$dp$数组分别表示和等于$i$的数列的大小之和,和等于i的数列的总数,背包转移即可。统计总数时可以处理$dp$的前缀和。

```
#include<iostream>
#define mod 1000000007
using namespace std;
long long fac[5001],invfac[5001],f[5001],s[5001],d[5001],t[5001],n;
long long fast_pow(long long a,long long b)
{
if (b==0)
return 1;
if (b&1)
return fast_pow(a*a%mod,b/2)*a%mod;
else
return fast_pow(a*a%mod,b/2);
}
long long C(long long a,long long b)
{
return fac[b]*invfac[b-a]%mod*invfac[a]%mod;
}
int main()
{
d[0]=1;
for (int i=1;i<=5000;++i)
for (int j=5000;j>=i;--j)
{
d[j]+=d[j-i];
s[j]+=(s[j-i]+d[j-i])%mod;
d[j]%=mod;
s[j]%=mod;
}
fac[0]=1;
for (int i=1;i<=5000;++i)
fac[i]=fac[i-1]*i%mod;
invfac[5000]=fast_pow(fac[5000],mod-2);
for (int i=4999;i>=0;--i)
invfac[i]=invfac[i+1]*(i+1)%mod;
for (int i=1;i<=5000;++i)
for (int j=1;j<=i;++j)
{
f[i]+=(C(j,i)*j%mod);
f[i]%=mod;
}
d[0]=0;
for (int i=1;i<=5000;++i)
s[i]=(s[i]+s[i-1])%mod;
for (int i=1;i<=5000;++i)
d[i]=(d[i]+d[i-1])%mod;
for (int i=1;i<=5000;++i)
t[i]=((t[i-1]+s[i]+d[i]-1)%mod+mod)%mod;
int q;
cin>>q;
for (int i=1;i<=q;++i)
{
cin>>n;
cout<<((f[n]-t[n])%mod+mod)%mod*fast_pow(fast_pow(2,n),mod-2)%mod<<endl;
}
return 0;
}

标签:5001,invfac,int,long,MtOI2019,时间,跳跃,fac,mod
来源: https://www.cnblogs.com/zhouhuanyi/p/12233052.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有