假设存在一个满足条件的长度为i的不下降序列(显然是一定存在的)那么只需要从中选出i个数即可

(不必在意选出具体数的大小,可以把满足条件的序列写下来,选几个数感受一下)。

但是$n \choose m $里的 \(m\) 的是就是 \((r-l+1)\) 吗?

乍一看是这样的,但是这样会出现一个问题,单调不下降子序列中的数可以重复,但如果只是从\(l\)到\(r\)去选数,那将会使结果变小。

所以可以先找出(当然是在脑子里找出)满足条件的长度为\(i\)的序列,然后和\(l\)到\(r\)这几个数合起来,从这几个数里面选出\(i\)个数。即 \(r-l+1+i\choose r-l+1\)

然后就从1$ \rightarrow $n枚举长度再求和即可

所以答案为

\[\sum ^n _{i=1} {\ r \ - \ l\ + \ 1 \ + \ i \choose \ i }
\]

但是此时O(\(n^+\))的时间复杂度一定是不可行的,而\(i\)的值又一直发生改变,无法化简。

所以我们可以把 \(r-l+1+i \choose i\) 写为\(r-l+1+i \choose r-l+1\),再设\(x=r-l+1\)那么原式变为

\[\sum ^n _{i=1} {x+i\choose \ i }
\]

也就是 $\qquad $ \({x+1 \choose x}\)+\({x+2 \choose x}\)+\({x+3 \choose x}\)+……+\({x+n \choose x}\)

接下来就是化简……

首先看一下\(n \choose m\) +\(n \choose m+1\)的结果是什么

\[{n\choose m}+{n\choose m+1}
\]
\[={\frac{n!}{m!*(n-m)!}} + { \frac {n!} {(m+1)!*(n-m-1)!}}
\]
\[={\frac{n!*(m+1)}{(m+1)!*(n-m!)}}+{\frac{n!*(n-m)}{(m+1)!*(n-m)!}}
\]
\[={\frac{(m+1+n-m)*n!}{(m+1)!*(n-m)!} }
\]
\[={\frac{(n+1)!}{(m+1)!*(n-m)!}}
\]
\[= {n+1 \choose m+1}
\]

所以有$${n\choose m}+{n\choose m+1}={n+1 \choose m+1}$$

那么给答案前面加一个\(x+1 \choose x+1\),根据刚刚的公式,\(x+1 \choose x+1\) + \(x+1 \choose x\) = \(x+2 \choose x+1\)

$\quad $$\quad $$\quad $$\quad $ 而\(x+2 \choose x\) + \(x+2 \choose x+1\) = \(x+3 \choose x+1\)

以此类推,最终答案是\({x+n\choose n}-1\)

附上代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define what_can_I_say main
#define crash_on_you 0
const int N=1e9+100,p=1000003;
int i,j,n,m,ans,t,l,r,x,fact[p+100],ny[p+100];
int op(int a,int b){
int ans=1;
while(b){
if(b&1)ans=ans*a%p;
a=a*a%p;
b>>=1;
}
return ans;
}
int c(int n,int m){
if(n<m)return 0;
return 1ll*(1ll*fact[n]*op(fact[m],p-2)%p)*op(fact[n-m],p-2)%p;
}
int lucas(int n,int m){
if(n<=p&&m<=p)return c(n,m);
return c(n%p,m%p)*lucas(n/p,m/p);
}
signed what_can_I_say(){
fact[0]=1;
for(i=1;i<p;i++)fact[i]=fact[i-1]*i%p;
scanf("%lld",&t);
while(t--){
scanf("%lld%lld%lld",&n,&l,&r);
x=r-l+1;
printf("%lld\n",(lucas(x+n,n)-1+p)%p);
}
return crash_on_you;
}

BZOJ 4403序列统计的更多相关文章

  1. Bzoj 4403: 序列统计 Lucas定理,组合数学,数论

    4403: 序列统计 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 328  Solved: 162[Submit][Status][Discuss] ...

  2. BZOJ 4403: 序列统计 数学 lucas

    4403: 序列统计 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4403 Description 给定三个正整数N.L和R,统计长度在 ...

  3. bzoj 4403 序列统计 卢卡斯定理

    4403:序列统计 Time Limit: 3 Sec  Memory Limit: 128 MB Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调 ...

  4. BZOJ 4403 序列统计(Lucas)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4403 [题目大意] 给定三个正整数N.L和R,统计长度在1到N之间, 元素大小都在L到 ...

  5. [BZOJ 4403]序列统计

    Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input 输入第一行包含一个整数T,表示数据组 ...

  6. bzoj 4403 序列统计——转化成组合数的思路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4403 先说说自己的想法吧. 设f[ i ][ j ]表示当前在倒数第 i 个位置,当前和后面 ...

  7. bzoj 4403: 序列统计【lucas+组合数学】

    首先,给一个单调不降序列的第i位+i,这样就变成了单调上升序列,设原来数据范围是(l,r),改过之后变成了(l+1,r+n) 在m个数里选长为n的一个单调上升序列的方案数为\( C_m^n \),也就 ...

  8. 【BZOJ 4403】 4403: 序列统计 (卢卡斯定理)

    4403: 序列统计 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 653  Solved: 320 Description 给定三个正整数N.L和R, ...

  9. BZOJ 3992 序列统计

    Description 小C有一个集合\(S\),里面的元素都是小于\(M\)的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为\(N\)的数列,数列中的每个数都属于集合\(S\). 小C用 ...

  10. [BZOJ 3992][SDOI2015]序列统计

    3992: [SDOI2015]序列统计 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 2275  Solved: 1090[Submit][Stat ...

随机推荐

  1. 深入解析:AntSK 0.1.7版本的技术革新与多模型管理策略

    在信息技术快速迭代的当下,.Net生态中的AntSK项目凭借其前沿的AI知识库和智能体技术,已经吸引了广大开发者的关注和参与.今天,我要给大家介绍的主角,AntSK 0.1.7版本,无疑将是这个开源项 ...

  2. Springboot K8s Job 一次性任务 如何禁用端口监听

    问题:SpringBoot一次性任务执行时,也会默认监听服务端口,当使用k8s job运行时,可能多个pod执行存在端口冲突 解决办法:命令行禁用SpringBoot一次性任务启动时端口占用 java ...

  3. 深入浅出Java多线程(十二):线程池

    引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第十二篇内容:线程池.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代软件开发中,多线程编程已经成为应对 ...

  4. Android MaterialButtonToggleGroup使用

    原文地址: Android MaterialButtonToggleGroup使用 - Stars-One的杂货小窝 觉得单选框不好看,发现了一个Material里的单选按钮组,感觉UI还不错,记下使 ...

  5. Java 学习分享

    建议语言入门可以先看看视频,学习网站可以是github,极客时间,infoQ等,然后去看书深入研究学习.学习最有效的方式一定是自己动手写代码,而不是看别人的代码,自己下载Intelli Idea多敲敲 ...

  6. C#实时监测文件夹变化

    在开发各种应用程序时,我们经常需要对文件系统中的文件或文件夹进行实时监测,以便在文件内容改变.文件被创建或删除时能够及时做出反应.在 C# 中,System.IO.FileSystemWatcher ...

  7. Snackbar源码分析

    目录介绍 1.最简单创造方法 1.1 Snackbar作用 1.2 最简单的创建 1.3 Snackbar消失的几种方式 2.源码分析 2.1 Snackbar的make方法源码分析 2.2 对Sna ...

  8. 三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍

    三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍 三维模型3DTile格式的轻量化处理旨在减少模型的存储空间和提高渲染性能.以下是一些推荐的工具软件,可以用于实现这个目的: MeshLab: ...

  9. 【K8S】Kubernetes中暴露外部IP地址来访问集群中的应用

    本文是Kubernetes.io官方文档中介绍如何创建暴露外部IP地址的Kubernetes Service 对象. 学习目标 运行Hello World应用程序的五个实例. 创建一个暴露外部IP地址 ...

  10. KingbaseES V8R6集群部署案例之---脚本部署节点环境检查故障

    KingbaseES V8R6集群部署案例之---脚本部署节点环境检查故障 案例说明: KingbaseES V8R6集群在部署前会对集群节点系统环境进行检测,检测失败后,将中断部署:其中一个检测项, ...