题目大意

给定若干组询问求$\sum\limits_{i=l}^r \dbinom{i}{k}$。

最终输出每组询问答案的乘积。

题解

首先把$l,r$分开处理相减,只需要求$\sum\limits_{i=1}^r \dbinom{i}{k}$即可

解法一:打表找规律

你会轻而易举的发现$\sum\limits_{i=1}^r \dbinom{i}{k}=\dbinom{r+1}{k+1}$

解法二:组合数意义

$\sum$在$1....n$个位置放$K$个的方案数$=$在$n+1$个位置安排$K+1$个并枚举最后一个放在哪里$=\dbinom{n+1}{k+1}$

解法三:整数裂项

$$\frac{\sum i(i-1)...(i-k+1)}{k!}$$

$$\sum i(i-1)...(i-k+1)=\frac{\sum (i+1-(i-k))i(i-1)...(i-k+1)}{k+1}$$

展开之后不难发现$(i+1-(i-k))i(i-1)...(i-k+1)$可以两两相消,最终答案变成$$\frac{(n+1)n...(n-k+1)}{(k+1)!}=\dbinom{n+1}{k+1}$$

#include<bits/stdc++.h>
#define debug(x) cerr<<#x<<" = "<<x
#define sp <<" "
#define el <<endl
#define LL long long
#define M 100020
#define mod 1000000007
using namespace std;
namespace IO{
const int BS=(1<<20)+5; char Buffer[BS],*HD,*TL;
char Getchar(){if(HD==TL){TL=(HD=Buffer)+fread(Buffer,1,BS,stdin);} return (HD==TL)?EOF:*HD++;}
int read(){
int nm=0,fh=1; char cw=Getchar();
for(;!isdigit(cw);cw=Getchar()) if(cw=='-') fh=-fh;
for(;isdigit(cw);cw=Getchar()) nm=nm*10+(cw-'0');
return nm*fh;
}
}
using namespace IO;
int n,m,fac[M],inv[M];LL ans;
LL F(int tot,int tk){if(tot<tk)return 0;return ((LL)fac[tot]*(LL)inv[tk]%mod)*(LL)inv[tot-tk]%mod;}
int main(){
n=read(),m=read(),ans=1,fac[0]=fac[1]=inv[0]=inv[1]=1;
for(int i=2;i<=n+1;i++) fac[i]=(LL)fac[i-1]*(LL)i%mod,inv[i]=(LL)(mod-(mod/i))*(LL)inv[mod%i]%mod;
for(int i=2;i<=n+1;i++) inv[i]=(LL)inv[i-1]*(LL)inv[i]%mod;
for(int i=1;i<=m;i++){
int l=read(),r=read(),K=read();K=l-K;
ans*=(F(r+1,K+1)-F(l,K+1)+mod),ans%=mod;
}printf("%lld\n",ans);
}

NOIP模拟题 膜法的更多相关文章

  1. 【入门OJ】2003: [Noip模拟题]寻找羔羊

    这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...

  2. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

  3. 9.9 NOIP模拟题

    9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...

  4. 8.22 NOIP 模拟题

      8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...

  5. NOIP模拟题17.9.26

    B 君的任务(task)[题目描述]与君初相识,犹如故人归.B 君看到了Z 君的第一题,觉得很难.于是自己出了一个简单题.你需要完成n 个任务,第i 任务有2 个属性ai; bi.其中ai 是完成这个 ...

  6. noip模拟题题解集

    最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...

  7. NOIP 模拟题

    目录 T1 : grid T2 : ling T3 : threebody 数据可私信我. T1 : grid 题目:在一个\(n*n\)的方格中,你只能斜着走.为了让问题更简单,你还有一次上下左右走 ...

  8. 6.19 noip模拟题(题目及解析转自 hzwer 2014-3-15 NOIP模拟赛)

    Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...

  9. 一些noip模拟题一句话题解

    Problem A: 序列 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 12  Solved: 9[Submit][Status][Web Boar ...

随机推荐

  1. CodeForces - 986A Fair (BFS+贪心)

    题意:有N个点M条边的无向图,每个点有给定的ai(1<=ai<=K,K<=200)表示该点拥有的物品编号,保证1-K在N个点全部出现.求每个点收集S个不同的物品所要走过的最短路程(边 ...

  2. $python数据分析基础——初识numpy库

    numpy库是python的一个著名的科学计算库,本文是一个quickstart. 引入:计算BMI BMI = 体重(kg)/身高(m)^2 假如有如下几组体重和身高数据,让求每组数据的BMI值: ...

  3. gitlab + jenkins + docker + k8s

    总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...

  4. GIT如何使用:大杀器!所有常用指令整理

    1 pwd 显示当前目录2 mkdir 创建目录 cd 进入文件3 git init 变成Git可以管理的仓库(千万不要修改目录下的.git隐藏文件夹)4 ls -ah 可以把.git文件显示出来5 ...

  5. JSONP跨站访问

    js中几种实用的跨域方法原理详解 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协 ...

  6. app自动化测试-appium

    一.环境准备(windows) 1.安装Microsoft .NET Framework 4.5 双击运行如下文件:net4.5.1.exe 2.安装node-v6.11.4-x64.msi 双击运行 ...

  7. [pixhawk笔记]1-编译过程

    好久没有编译过PIXHAWK了,由于项目需要,又买了一个pixhawk2,由于每次编译都会出现新的问题,这次写帖子将过程记录下来. 环境:WIN10+Ubuntu16.04 64位(VMware Wo ...

  8. jQuery多级联动美化版Select下拉框

    在线演示 本地下载

  9. 关于全志A20的Ubuntu12.04 64位系统下环境配置及编译过程笔记【转】

    本文转载自:https://blog.csdn.net/buqingbuyuan/article/details/43370199 在安装Ubuntu系统之后,安装编译所需的GCC等工具,一般选用GC ...

  10. shell printf命令:格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...