NOIP模拟题 膜法

2024-02-24 03:20
文章标签 模拟题 noip 膜法

本文主要是介绍NOIP模拟题 膜法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目大意

给定若干组询问求$\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);
}

 

转载于:https://www.cnblogs.com/OYJason/p/9914797.html

这篇关于NOIP模拟题 膜法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/740805

相关文章

机试算法模拟题 服务中心选址

题目描述 一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。 给你一个数组positions,其中positions[i] = [left, right] 表示第 i 个区域在街道上的位置,其中left代表区域的左侧的起点,right代表区域的右侧终点,假设服务中心的位置为loca

NOIP 2015 CCF (CSP -J)初赛真题

第二十 一届全国青少年信息学奥林匹克联赛初赛 ; 普及组C++ 语言试题 竞 赛 时 间: 20 1 5 年 1 0 月 1 1 日 1 4 : 3 0~ 1 6 : 3 0 选 手注 意: • 试腰紙共有7 页,答題紙共有2页,满分100 分。请在答感統上炸答,写在試感纸上的一律无 效。 • 不得使用任何电子设 备(如计算器、手机、 电子词典等》或查阅 任何书籍發 料。 一、单项选择题(

HDU 1332(模拟题,电子数字)

#include <iostream>#include <cstring>using namespace std;#define MAXLENGTH 8void lcd_display (long size, long number){// 将number拆分为单个的数字。int digits[MAXLENGTH];memset (digits, -1, sizeof (

NOIP 2010 乌龟棋

题目 描述 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数)。棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。 乌龟棋中M张爬行卡片,分成4种不同的类型(M张卡片中不一定包含所有4种类型的卡片,见样例),每种类型的卡片上分别标有1、2、3、4四个数字之一,表示使用这种卡片后,乌龟棋子将向前爬行

AcWing 1801:蹄子剪刀布 ← 模拟题

【题目来源】https://www.acwing.com/problem/content/1803/【题目描述】 你可能听说过“石头剪刀布”的游戏。 这个游戏在牛当中同样流行,它们称之为“蹄子剪刀布”。 游戏的规则非常简单,两头牛相互对抗,数到三之后各出一个表示蹄子,剪刀或布的手势。蹄子赢剪刀,剪刀赢布,布赢蹄子。 例如,第一头牛出“蹄子”手势,第二头牛出“布”手势,则第二头牛获胜。 如果两头牛出

Elasticsearch 认证模拟题 - 22

一、题目 索引 task 索引中文档的 fielda 字段内容包括了 hello & world,索引后,要求使用 match_phrase query 查询 hello & world 或者 hello and world 都能匹配该文档 1.1 考点 分词器 1.2 答案 # 创建符合条件的 task 索引,设置 field 字段,并写入数据PUT task{"settings

模拟题1(考虑周全以及情况较多)

牛客小白月赛96(重现赛)D题 题目解析以及注意事项 该题主要是找线路最多和最少的各种情况,从而达到整体连通图的构建代价最小的情况。 注意事项:a,b的正负影响着这个图的线尽可能的多还是少 思路图 { a ≥ b { b < 0 a < 0 : 能连的线都连上 b < 0 a ≥ 0 :奇偶性不同线能连的的全连上 b > 0 :连奇偶性不同的点,而且线的数量要尽量小 a < b { a <

Elasticsearch 认证模拟题 - 21

一、题目 写一个查询,要求查询 kibana_sample_data_ecommerce 索引,且 day_of_week、customer_gender、currency、type 这 4 个字段中至少两个以上。 1.1 考点 Boolean 1.2 答案 GET kibana_sample_data_ecommerce/_search{"query": {"bool": {"sho

hodj 1008 Elevator (模拟题)

个人写的代码不够简洁,而且在处理这种多循环的代码时,每次循环时变量没有重新赋值为0,造成了调试了好几次代码才通过,这是不应该的。在这次代码中,time和current都没有重新赋值为0,下回应该注意。还要网友在代码中对题目的中时间常量进行了赋值,这一点很好,要学习。 代码如下: #include <iostream>#include <algorithm>#include <string>

Elasticsearch 认证模拟题 - 17

这两道题目非常具有代表性,分别是跨集群复制和跨集群检索,需要相应的 许可 这里在虚拟机上搭建集群完成这两道题目,这里补充一下 elasticsearch 和 kibana 的配置文件 # elasticsearch.ymlcluster.name: cluster2node.name: cluster2-nodepath.data: /home/jie/es8/cluster2/data