当前位置: 首页 > article >正文

另类推柿子 Crypto Lights

Crypto Lights

大意:
有 n 个台灯初始时都是暗的,每次等概率随机一个暗台灯将其点亮,若点亮后存在一个长度为 k 的连续段有大于一个台灯被点亮则立刻停止,求期望点亮多少台灯。答案对1e9+7 取模

思路:

没见过这样子的推柿子的题,也算是开开眼了

考虑一个非常正确的答案

ans=\sum_{i=1}^{n} i*p_i,其中pi表示第i次结束的概率,

显然这就是期望的定义求法。但是这样一个式子在大多数时候并不能带给我我们实质性的进展,因为它没有什么可以操作的空间(也可能是我见的太少了)。不过这里我们可以换一个角度来看这个式子

把式子一个一个写开

p_1+2p_2+3p_3+....+np_n

=(p1+p2+p3+...+pn)+(p2+p3+...+pn)+...+(p_{n-1}+p_n)+p_n

如果我们令s_i=\sum_{j=i}^{n} p_i,显然答案也可以表示成\sum s_i

这样就成果转化了需要求的东西。

但是这还不够,在我们赋予si实际意义之前,求它跟求pi之和没什么区别

不难发现,si表示在第i次,第i+1次,...第n次结束的概率之和,这其实也就等于第i-1次无法结束的概率(这个应该不难想)

所以我们求si,其实也就是求第i-1次不会结束的概率

接着转化题意:

现在有n个小球,要求选择i-1个小球,两两之间有至少k-1个小球

不妨先将i-1个小球摆好,这样整个集合被分成了i个位置,我们还有n-(i-1)个小球可以放进去

中间的i-2个位置每一个至少要有k-1个小球,所以我们先放进去(k-1)*(i-2)个小球,还剩下

n-(i-1)-(k-1)(i-2)个小球,这些相同的小球要放进i个位置里,可以有位置为空,所以直接隔板法即可

那么最后的方案数就是\binom{n-(i-1)-(k-1)(i-2)+(i-1)}{i-1}=\binom{n-(k-1)(i-2)}{i-1},再除以放i-1个小球的总方案数,s_i=\frac{\binom{n-(k-1)(i-2)}{i-1}}{\binom{n}{i-1}}

code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const ll N=4e5+10;
const ll mod=1e9+7;
ll n,m,x,y,k;
ll p[N],pp[N];
ll ksm(ll x,ll y)
{
    ll ans=1;
    while(y)
    {
        if(y&1) ans=ans*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return ans;
}
ll inv(ll x)
{
    return ksm(x,mod-2);
}
void init()
{
    p[0]=1;
    for(int i=1;i<=400000;++i) p[i]=p[i-1]*i%mod;
    pp[400000]=inv(p[400000]);
    for(int i=400000-1;i>=0;--i) pp[i]=pp[i+1]*(i+1)%mod;
}
ll C(ll n,ll m)
{
    if(n<m) return 0;
    return p[n]*pp[m]%mod*pp[n-m]%mod;
}
void solve()
{
    init();
    cin>>n>>k;
    ll ans=0;
    for(int i=1;i<=n;++i)
	{
   		ans=(ans+C(n-(i-2)*(k-1),i-1)*inv(C(n,i-1))%mod)%mod;	
	}
	cout<<ans<<endl;
}
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    ll t;cin>>t;while(t--)
    solve();
    return 0;
}

 


http://www.kler.cn/a/7262.html

相关文章:

  • mac上使用docker搭建gitlab
  • 以太坊基础知识结构详解
  • 低代码平台:跨数据库处理的重要性与实现方式
  • centos7 升级openssl 与升级openssh 安装卸载 telnet-server
  • 处理namespace问题:Namespace not specified for AGP 8.0.0
  • Chrome和Chromium的区别?浏览器引擎都用的哪些?浏览器引擎的作用?
  • 同步和异步的区别
  • unity,通俗解释什么是协程
  • 无公网IP,SSH远程连接Linux CentOS服务器【内网穿透】
  • 2023年第十四届蓝桥杯javaB组省赛真题
  • deepin15.11无法正常输入汉字问题的解决
  • UE5实现贴地面效果(RT+Decal)
  • Java设计模式(三)原型模式
  • SpringBoot源码学习系列——自动配置原理(三)
  • SpringBoot:自动配置源码底层原理分析
  • Web漏洞-文件包含漏洞超详细全解(附实例)
  • 章节2 行走数据江湖,只需一行代码
  • windows 解决惠普主机核显无法输入VGA、HDMI信号问题
  • MATLAB结构化程序设计
  • MySQL 存储引擎
  • Java设计模式(九)外观模式
  • mongodb和mysql双写数据一致性问题
  • 如何提高逻辑思维,亲测,这3个方法有效
  • C++封装详解——从原理到实践
  • 实验四 配置OSPF协议
  • 投资大咖说,消费产业3个升级方向