题目链接:点击查看

题目大意:给出 nnn 个初始时熄灭的灯泡,每次操作会等概率打开一个灯泡,当每 kkk 个连续的灯泡中出现了大于一个亮着的灯泡时停止操作,问期望操作次数是多少

题目分析:组合数学题留给队友补了,只是想解释一下这个模型,转换的过程借用洛谷大牛的题解了(侵权删)
主要是想讲一下最后这个 “经典模型” ,其中 PiP_iPi​ 为操作 iii 次后,还没有结束的方案数。可以这样考虑,因为任意两个灯泡之间需要间隔为 kkk,所以放 iii 个灯泡两两之间需要有 i−1i-1i−1 个隔板隔开,而每个隔板需要用 k−1k-1k−1 个灯泡去充当,这样对于剩下的 n−(i−1)∗(k−1)n-(i-1)*(k-1)n−(i−1)∗(k−1) 个灯泡而言就可以随便选 iii 个了,然后再用 i−1i-1i−1 个隔板将其隔开就一定合法了

这也就对应着前半段的 Cn−(i−1)∗(k−1)iC_{n-(i-1)*(k-1)}^{i}Cn−(i−1)∗(k−1)i​ 了

对于后半段的贡献可以这样考虑,假如从一开始 nnn 个灯泡开始选 iii 个,依次选中的概率分别是 {1n,1n−1,1n−2,...,1n−i+1}\{\frac{1}{n},\frac{1}{n-1},\frac{1}{n-2},...,\frac{1}{n-i+1}\}{n1​,n−11​,n−21​,...,n−i+11​},累乘起来就是 (n−i)!n!\frac{(n-i)!}{n!}n!(n−i)!​,又因为选择 iii 个灯泡的次序可以随意,所以还需要乘以 i!i!i!,所以后半段的贡献就是 i!(n−i)!n!\frac{i!(n-i)!}{n!}n!i!(n−i)!​ 了

对于本题需要注意的是,如果将 PiP_iPi​ 的 i=0i=0i=0 代入,整个式子是 111,也就是答案初始化的数值了

代码:

// Problem: E. Crypto Lights
// Contest: Codeforces - Deltix Round, Spring 2021 (open for everyone, rated, Div. 1 + Div. 2)
// URL: https://codeforces.com/contest/1523/problem/E
// Memory Limit: 256 MB
// Time Limit: 3000 ms
//
// Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2)
// #pragma GCC optimize("Ofast","inline","-ffast-math")
// #pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<list>
#include<unordered_map>
#define lowbit(x) x&-x
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
template<typename T>
inline void read(T &x)
{T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f;
}
template<typename T>
inline void write(T x)
{if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');
}
const int inf=0x3f3f3f3f;
const int N=1e6+100;
const int mod=1e9+7;
LL fac[N],inv[N];
LL q_pow(LL a,LL b) {LL ans=1;while(b) {if(b&1) {ans=ans*a%mod;}a=a*a%mod;b>>=1;}return ans;
}
void init() {fac[0]=1;for(int i=1;i<N;i++) {fac[i]=fac[i-1]*i%mod;}inv[N-1]=q_pow(fac[N-1],mod-2);for(int i=N-2;i>=0;i--) {inv[i]=inv[i+1]*(i+1)%mod;}
}
LL C(int n,int m) {return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int main()
{#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);init();int w;cin>>w;while(w--) {int n,k;read(n),read(k);LL ans=1;for(int i=1;n-(i-1)*(k-1)>=i;i++) {ans=(ans+C(n-(i-1)*(k-1),i)*q_pow(C(n,i),mod-2))%mod;}cout<<ans<<endl;}return 0;
}

CodeForces - 1523E Crypto Lights(组合数学+推公式)相关推荐

  1. Deltix Round, Spring 2021 E. Crypto Lights 组合数学 + 推公式

    传送门 文章目录 题意: 思路: 题意: 给你nnn个灯,每次可以打开一个灯,当连续的kkk个灯有至少两个灯开着的时候停止,问最终期望能打开多少灯. 思路: 由于不想打latexlatexlatex, ...

  2. CodeForces - 466C Number of Ways(推公式/dp)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列,现在要求出满足条件的 ( i , j ) 的匹配数量,满足: 题目分析:训练时推的公式,简单说一下吧,维护前缀和 sum,则确定两个断点 ( ...

  3. CodeForces - 1459C Row GCD(数论+推公式)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数组 aaa,再给出一个长度为 mmm 的数组 bbb,现在要求输出,当 j=1,2,...,mj = 1,2,...,mj=1,2,...,m ...

  4. 牛客多校6 - Binary Vector(组合数学+推公式)

    题目链接:点击查看 题目大意:给出一个 n * n 的 01 矩阵,求满秩的概率 题目分析:首先公式是: 稍微解释一下吧,将 n * n 的矩阵视为 n 个长度为 n 的向量,对于每一个长度为 n 的 ...

  5. CodeForces - 830C Bamboo Partition(数学+推公式)

    题目链接:点击查看 题目大意:给出 nnn 个位置可以种竹子,每个位置的竹子的高度需要到达 aia_iai​,所有竹子每天都会长高一个单位高度,同样每个竹子可以在任意位置砍一次,砍过之后竹子将不再长高 ...

  6. 另类推柿子 Crypto Lights

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

  7. Turing Tape (推公式 模拟)

    Turing Tape - CodeForces 132A - Virtual Judge (csgrandeur.cn) 题意: 记录一个数字的前n个二进制数表示的十进制数 int t=s[i];L ...

  8. 牛客小白赛60(F.被抓住的小竹)61(E.排队)(数学+推公式)

    文章目录 前言 逆序对是典型题,常用统计数组内逆序对用树状数组.但是求排列中的总逆序对数量需要利用组合数学推导公式. F.被抓住的小竹 E.排队 总结 前言 逆序对是典型题,常用统计数组内逆序对用树状 ...

  9. 【干货】105页周志华教授《机器学习手推公式》开源PDF

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 上述内容是手推公式的主要内容,本项目的Github主页如下:https://git ...

最新文章

  1. 独家 | 手把手教你推导决策树算法
  2. 【mysql】sql查询速度不变?不同数据量下,查询速度不会变化的问题
  3. 对比学习系列论文SimROD(二): A Simple Adaptation Method for Robust Object Detection
  4. 2017 五月 UFED Series Releases 系列 6.2更新发布
  5. 【算法入门】动态图展示 6 个常用的数据结构,一目了然!
  6. centos7的网络配置
  7. keeko机器人_机器人零距离,创意搭建编程妙趣多!——瑞云社区开展全国科普日活动...
  8. [转]Linux下用gcc/g++生成静态库和动态库(Z)
  9. 图书管理系统c语言ns图,图书管理系统流程图.doc
  10. 数字滤波器设计工具_数字设计师和代理商的资源和工具
  11. 阿里第九版Java系统架构师+应用架构师面试突击宝典
  12. 在LabWindows/CVI中程控的调整表格控件的属性
  13. 如何删除桌面右键菜单中的英特尔核心显卡选项
  14. ModSecurity规则
  15. c# u盘使用记录_C#检测是否有u盘插入的方法
  16. python 从大到小循环_Python循环小实例----猜大小
  17. 【Unity后期渲染】Post Processing 后处理插件最全使用说明
  18. IP地址归属地查询完整版
  19. 最简单克隆虚拟机方法
  20. 2021-2027全球与中国电动汽车线束和连接器市场现状及未来发展趋势

热门文章

  1. worknc的后处理如何安装_UG NX后处理安装方法(新手入门)
  2. 高一计算机组装,高中生计算机组装与维护,呼市新华互联网学校
  3. 认证(登录)功能需求分析
  4. Pod详解-生命周期-钩子函数
  5. MQ 的本质是什么呢?
  6. fullyRelease
  7. 回顾线程的竞争机制-轻量级锁
  8. 完成DI 依赖注入功能
  9. 执行Bean 实例化
  10. MybatisPlus实现分页