4403: 序列统计 组合数学+Lucas定理
2016-02-17 09:28
288 查看
组合的知识大大欠缺啊。。好好学习一下。
先膜出题人yts1999大爷。
首先转化一下问题:
求长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。我们进行加标号的操作,将每一位的值都+i,即转化为:求长度在1到N之间,元素大小都在L+1到R+N之间的单调递增序列的数量(不懂画个图)。
那么这个问题就相当于在区间[L+1,R+N]这R−L+N个数中选择N个的方案数,即CNR−L+N即CR−LR−L+N。
为了表述方便,我们令M=R−L+1,上式转化为CM−1M+N−1。
所以答案为∑i=1NCM−1i+M−1
因为CMN=CMN−1+CM−1N−1
所以我们有以下等价转化:
∑Ni=1CM−1i+M−1
=(∑Ni=1CM−1i+M−1)+CMM−1
=(∑Ni=2CM−1i+M−1)+CMM+1−1
=(∑Ni=3CM−1i+M−1)+CMM+2−1
...
=CMN+M−1
然后用Lucas定理解决。
先膜出题人yts1999大爷。
首先转化一下问题:
求长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。我们进行加标号的操作,将每一位的值都+i,即转化为:求长度在1到N之间,元素大小都在L+1到R+N之间的单调递增序列的数量(不懂画个图)。
那么这个问题就相当于在区间[L+1,R+N]这R−L+N个数中选择N个的方案数,即CNR−L+N即CR−LR−L+N。
为了表述方便,我们令M=R−L+1,上式转化为CM−1M+N−1。
所以答案为∑i=1NCM−1i+M−1
因为CMN=CMN−1+CM−1N−1
所以我们有以下等价转化:
∑Ni=1CM−1i+M−1
=(∑Ni=1CM−1i+M−1)+CMM−1
=(∑Ni=2CM−1i+M−1)+CMM+1−1
=(∑Ni=3CM−1i+M−1)+CMM+2−1
...
=CMN+M−1
然后用Lucas定理解决。
#include<iostream> #include<cstdio> #define ll long long #define M 1000003 using namespace std; ll fac[M],inv[M]; inline int read() { int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f; } inline void pre() { fac[0]=inv[1]=inv[0]=1; for (int i=1;i<M;i++) fac[i]=fac[i-1]*i%M; for (int i=2;i<M;i++) inv[i]=(M-M/i)*inv[M%i]%M; for (int i=1;i<M;i++) inv[i]=inv[i]*inv[i-1]%M; } ll C(int n,int m) { if (n<m) return 0; if (n<M&&m<M) return fac *inv[m]%M*inv[n-m]%M; return C(n/M,m/M)*C(n%M,m%M)%M; } int main() { int T=read(); pre(); while (T--) { int n=read(),l=read(),r=read(),m=r-l+1; printf("%d\n",(C(n+m,m)+M-1)%M); } return 0; }
相关文章推荐
- Linux内存管理机制简介
- 框架模式MVP在Android中的使用
- 【业内新闻】 用眼睛控制虚拟现实内容
- Sqlite全面学习(一)
- 8大排序算法+二分折半查找算法
- python idle 错误 subprocess didn't make connection
- 【开发手记一】老生常谈:简简单单配置ZED板开发环境
- php与java通用AES加密解密算法
- 用“逐步排除”的方法定位Java服务线上“系统性”故障
- hdu 1098 Ignatius's puzzle
- Bootstrap中CSS的使用方法
- docker+lvs配置
- Dom4j 解析 XML文件
- Spring 使用注解方式进行事务管理--注解回滚机制
- PHP:echo中逗号与点号的区别
- 新手编程入门一:用Exception来进行流程控制
- 《Pandoc用户指南》之一
- 设置层级深度
- 框架模式 MVC 在Android中的使用
- react-natve,Windows系统下配置(解决大部分BUG)