首先,给一个单调不降序列的第i位+i,这样就变成了单调上升序列,设原来数据范围是(l,r),改过之后变成了(l+1,r+n)

在m个数里选长为n的一个单调上升序列的方案数为\( C_m^n \),也就是随便选n个数只能组成惟一的单调上升序列,所以要求的式子就变成了

\[\sum_{i=1}^{n}C_{r-l+i}^{i}
\]

这样看着比较难受,我们把它改成

\[\sum_{i=1}^{n}C_{r-l+i}^{r-l}
\]

我们在开头加一个\( C_{r-l+1}^{r-l+1} \),这样根据\( C_nm=C_{n-1}m+C_{n-1}^{m-1} \),他就可以和式子的第一项\( C_{r-l+1}^{r-l} \)合并为\( C_{r-l+2}^{r-l+1} \),然后这个又可以可第二个合并,以此类推,最后这个式子就会合并为\( C_{r-l+n+1}^{r-l+1} \),然后再减掉\( C_{r-l+1}^{r-l+1}=1 \)即可

然后用lucas求这个组合数即可

#include<iostream>
#include<cstdio>
using namespace std;
const long long N=1000010,mod=1e6+3;
long long T,n,l,r,fac[N],inv[N];
long long ksm(long long a,long long b)
{
long long r=1;
while(b)
{
if(b&1)
r=r*a%mod;
a=a*a%mod;
b>>=1;
}
return r;
}
long long C(long long n,long long m)
{
if(m>n)
return 0;
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
long long lucas(long long n,long long m)
{
if(m>n)
return 0;
return n<mod?C(n,m):lucas(n/mod,m/mod)*C(n%mod,m%mod)%mod;
}
int main()
{
scanf("%lld",&T);
fac[0]=1,inv[0]=1;
for(int i=1;i<mod;i++)
fac[i]=fac[i-1]*i%mod;
inv[mod-1]=ksm(fac[mod-1],mod-2);
for(int i=mod-2;i>=1;i--)
inv[i]=inv[i+1]*(i+1)%mod;
while(T--)
{
scanf("%lld%lld%lld",&n,&l,&r);
printf("%lld\n",(lucas(r-l+n+1,r-l+1)-1+mod)%mod);
}
return 0;
}

bzoj 4403: 序列统计【lucas+组合数学】的更多相关文章

  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】 4403: 序列统计 (卢卡斯定理)

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

  8. 【BZOJ4403】序列统计(组合数学,卢卡斯定理)

    [BZOJ4403]序列统计(组合数学,卢卡斯定理) 题面 Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取 ...

  9. BZOJ4403 序列统计—Lucas你好

    绝对是全网写的最详细的一篇题解  题目:序列统计 代码难度:简单 思维难度:提高+-省选 讲下题面:给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案 ...

随机推荐

  1. 搭建企业内部DNS服务器,docker 部署内部 dnsmasq

    获取镜像 docker pull jpillora/dnsmasq 配置域名 # http://oss.segetech.com/intra/srv/dnsmasq.conf #log all dns ...

  2. Maven实现Web应用集成測试自己主动化 -- 測试自己主动化(WebTest Maven Plugin)

    近期在appfuse看到使用webtest-maven-plugin实现Web应用的集成測试,研究了下.感觉很不错.对于Web应用自己主动构建很有帮助,在性能測试之前能够保证Web应用的基本功能工作正 ...

  3. Nova虚拟机迁移

    这里根据我的配置环境只讲述冷迁移(Migrate Instance)需要进行的计算节点配置而不包含热迁移(Live Migrate Instance),后者需要共享存储及Hypervisor的支持. ...

  4. H5新增表单属性

    一.form属性 <form id="test"> <input type="text" placeholder="请输入合适的信息 ...

  5. VC++中全局变量的问题(转)

    全局变量一般这样定义:1.在一类的.cpp中定义 int myInt;然后再在要用到的地方的.cpp里extern int myInt:这样就可以用了. 2.在stdafx.cpp中加入:int my ...

  6. hadoop报JAVA_HOME is not set暂时解决办法

    直接在etc/hadoop/hadoop-env.sh中 export JAVA_HOME=XXX

  7. swing_tableModel 创建表格

    import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Panel; import java.util.Ar ...

  8. date 命令 时间戳到标准格式转换

    1. 知道时间戳看标准时间, 时间戳到 秒: Wed Apr :: CST 2. 看到前时间时间戳格式 date +%s 3. 知道某个标准时间, 看时间戳 date -d "Wed Apr ...

  9. codeforces 443 B. Kolya and Tandem Repeat 解题报告

    题目链接:http://codeforces.com/contest/443/problem/B 题目意思:给出一个只有小写字母的字符串s(假设长度为len),在其后可以添加 k 个长度的字符,形成一 ...

  10. ubuntu下tesseract 4.0安装及参数使用

    tesseract是一个开源的OCR引擎,最初是由惠普公司开发用来作为其平板扫描仪的OCR引擎,2005年惠普将其开源出来,之后google接手负责维护.目前稳定的版本是3.0.4.0版本加入了基 ...