题目

天上的繁星一闪一闪的,甚是好看。你和你的小伙伴们一起坐在草地上,欣赏这美丽的夜景。

我们假定天上有\(n\)颗星星,它们排成一排,从左往右以此编号为1到\(n\),但是天上的星星实在太多了,你和你的小伙伴

们只能看到其中的\(k\)个星星,所以需要你在这\(n\)颗星星中选出\(k\)颗来进行观测,但是你的小伙伴给你提出了一个要求,

这\(k\)颗星星中,至少存在\(r\)颗星星是连续的,连续是指这些星星的编号连续。


分析

考虑答案可以容斥实现,也就是

\[\large\sum_{i=1}^{\lfloor\frac{k}{r}\rfloor}(-1)^{i-1}\times C(n-k+1,i)\times C(n-ir,k-ir)
\]

实质的过程就是在\(n-k+1\)个位置中选择\(i\)个位置插入长度至少为\(r\)的星星,

然后再在\(n-ir\)颗星星中选出\(k-ir\)颗星星,这样恰好选出\(k\)颗星星


代码

#include <cstdio>
#define rr register
using namespace std;
const int mod=1000000007,N=10000011;
int n,m,G,inv[N],fac[N],ans;
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline signed C(int n,int m){return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;}
signed main(){
fac[0]=fac[1]=inv[0]=inv[1]=1,scanf("%d%d%d",&n,&m,&G);
for (rr int i=2;i<=n;++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for (rr int i=2;i<=n;++i) fac[i]=1ll*fac[i-1]*i%mod,inv[i]=1ll*inv[i-1]*inv[i]%mod;
for (rr int i=1;i<=m/G;++i)
ans=mo(ans,1ll*((i&1)?1:(mod-1))*C(n-m+1,i)%mod*C(n-i*G,m-i*G)%mod);
return !printf("%d",ans);
}

#组合计数,容斥定理#U136346 数星星的更多相关文章

  1. [CTS2019]珍珠(NTT+生成函数+组合计数+容斥)

    这题72分做法挺显然的(也是我VP的分): 对于n,D<=5000的数据,可以记录f[i][j]表示到第i次随机有j个数字未匹配的方案,直接O(nD)的DP转移即可. 对于D<=300的数 ...

  2. BZOJ2839 : 集合计数 (广义容斥定理)

    题目 一个有 \(N\) 个 元素的集合有 \(2^N\) 个不同子集(包含空集), 现在要在这 \(2^N\) 个集合中取出若干集合(至少一个), 使得它们的交集的元素个数为 \(K\) ,求取法的 ...

  3. 51nod1284容斥定理

    1284 2 3 5 7的倍数 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题   给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N = 10, ...

  4. 2 3 5 7的倍数 (51Nod - 1284)[容斥定理]

    20180604 给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N = 10,只有1不是2 3 5 7的倍数. Input 输入1个数N(1 <= N <= 10^1 ...

  5. 题解报告:hdu 4135 Co-prime(容斥定理入门)

    Problem Description Given a number N, you are asked to count the number of integers between A and B ...

  6. HDU1796 How many integers can you find【容斥定理】

    题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=1796 题目大意: 给你一个整数N.和M个整数的集合{A1.A2.-.Am}.集合内元素为非负数(包 ...

  7. Codeforces Round #330 (Div. 2) B. Pasha and Phone 容斥定理

    B. Pasha and Phone Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/595/pr ...

  8. hdu_5213_Lucky(莫队算法+容斥定理)

    题目连接:hdu_5213_Lucky 题意:给你n个数,一个K,m个询问,每个询问有l1,r1,l2,r2两个区间,让你选取两个数x,y,x,y的位置为xi,yi,满足l1<=xi<=r ...

  9. How Many Sets I(容斥定理)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3556 How Many Sets I Time Limit: 2 ...

  10. HDU - 4135 Co-prime 容斥定理

    题意:给定区间和n,求区间中与n互素的数的个数, . 思路:利用容斥定理求得先求得区间与n互素的数的个数,设表示区间中与n互素的数的个数, 那么区间中与n互素的数的个数等于.详细分析见求指定区间内与n ...

随机推荐

  1. 麒麟系统开发笔记(十二):在国产麒麟系统上编译GDAL库、搭建基础开发环境和基础Demo

    前言   麒麟系统上做全球北斗定位终端开发,北斗GPS发过来的是大地坐标,应用需要的是经纬度坐标,所以需要转换,可以使用公式转换,但是之前涉及到了山He智能一个项目使用WG.   大地坐标简介 概述 ...

  2. python中如何使两个序列相加不改变内存地址的几种方式

    # 方式1 a = [1,2,3] print(a) # 4551311680 a.extend([4,5]) print(a) # 4551311680 # 方式2 b = [1,2,3] prin ...

  3. auth模块的一些方法

    auth模块 auth模块是cookie和session的升级版,auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象,而 ...

  4. Django3.2

    Django3.2 前言 之前我们介绍过web应用程序和http协议,简单了解过web开发的概念.Web应用程序的本质 接收并解析HTTP请求,获取具体的请求信息 处理本次HTTP请求,即完成本次请求 ...

  5. 教你如何用Keepalived和HAproxy配置高可用 Kubernetes 集群

    本文分享自华为云社区<使用 Keepalived 和 HAproxy 创建高可用 Kubernetes 集群>,作者:江晚正愁余. 高可用 Kubernetes 集群能够确保应用程序在运行 ...

  6. webservice之jersey简单实用

    前言 项目中更需要使用到webservice,具体的是使用jersey.那么首先需要了解jersey和webservice的关系,捋顺webservice框架的各种实现,通过查阅相关博客,我个人总结w ...

  7. nmcli命令详解(创建热点,连接wifi,管理连接等)

    目录 简述 语法 比较有用的选项(OPTION) 对象 general对象(常规信息) 用途 语法 networking对象(整个网络) 用途 语法 命令示例 radio对象(无线开关) 用途 语法 ...

  8. 基于图数据库 NebulaGraph 实现的欺诈检测方案及代码示例

    本文是一个基于 NebulaGraph 图算法.图数据库.机器学习.GNN 的 Fraud Detection 方法综述.在阅读本文了解欺诈检测的基本实现方法之余,也可以在我给大家准备的 Playgr ...

  9. ubuntu22.04安装配置redis

    本操作在虚拟机上 安装Redis 1)更新系统 sudo apt update sudo apt upgrade 2)安装Redis sudo apt install redis-server 3)测 ...

  10. vmware完全卸载 防止出现各种问题治标不治本

    首先打开系统盘根目录,搜索" VMware ",把搜到的都删掉,去控制面板那里卸载掉VMware 打开管理(右键"我的电脑"),管理打开设备管理器," ...