绝对是全网写的最详细的一篇题解(因为我弱) 

  题目:序列统计  代码难度:简单  思维难度:提高+—省选

  讲下题面:给定三个正整数N、L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。输出答案对10^6+3取模的结果。

  。。。    防

  。。。    蒯

  。。。    神

  。。。    器

  好了,把我的做题思路说说。

  首先我们可以看出,L和R的具体值是没有卵用的,你只需要知道它们的差+1,记为m。同时T<=100也意味着各组询问之间应该并没有关系。

  然后我们会想到,这肯定不能一步出解(事实证明我被打脸了)。然后我们来找,对于条件(i,m),它的解是怎么来的。

  长度为i,备选数的值域(下面就叫做值数)有m个的单调不下降序列有多少个呢?

  这么一想不是很好想出来。那么我们想,如果把相同的数归入一个集合,或者叫抽屉,给它们以里面的数的代数值为编号,这个序列就可以看成一段段连续的抽屉,且它们的编号成递增。

  问题是不是可以抽象成:我有m个有编号的抽屉,要把i个相同的苹果放进去,问有多少种方法?

  此时问题已经渐渐清晰成具体模型了,但对于有些人(such as me)来说还是很玄学。于是我们再看看。

  上面那个问题下,抽屉是不动物体。现在我们把苹果当成不动物体看看:

  有i个苹果,要把它们分成至多m个区间,有多少种方法?

  这个时候千万不要想复杂了。对于这个问题,如果我们不局限于单个的i和m,而是把它们巧妙转化,整合在一起的话——

  有i个苹果,m-1个挡板。我们要在苹果中间插入挡板(也可以是最两侧),有多少种方法?

  换言之——

  有m+i-1个位子,你要在里面放m-1个挡板,有多少种放法?

  那么就是显然的组合数学!C(i+m-1,m-1)!

  那么我们知道(i,m)的答案就是C(i+m-1,m-1)。

  那么答案就是sigma(i from 1 to n)C(i+m-1,m-1);

  然而这是会T的复杂度。我们画出杨辉三角(或者根本不用画),就能发现它是在三角上的一条向左下倾斜的线。那么优化就顺(sang)理(xin)成(bing)章(kuang)了:

  在右上角加一个C(m,m),根据杨辉三角的特点,我们可以一路消掉,一直到C(N+M,M);

  因为我们之前加上了C(M,M),所以答案要减一。Ans=C(N+M,M)-1;正面肛Lucas定理。

  介绍一下Lucas定理:C(N,M)%P=Lucas(N,M,P)=C(N%P,M%P)*Lucas(N/P,M/P,P);

  逆元和阶乘预处理一下就好了。

  

#include    <iostream>
#include    <cstdio>
#include    <cstdlib>
#include    <algorithm>
#include    <vector>
#include    <cstring>
#include    <queue>
#define LL long long int
#define ls (x << 1)
#define rs (x << 1 | 1)
#define MID int mid=(l+r)>>1
using namespace std;
const LL Mod = 1000003;
LL cmod[Mod],A[Mod],J[Mod],n,m;
LL gi()
{LL x=0,res=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')res*=-1;ch=getchar();}while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return x*res;
}
LL C(LL N,LL M,LL P)
{if(M>N)return 0ll;LL ans=J[N];ans=ans*A[J[N-M]]%P;ans=ans*A[J[M]]%P;return ans;
}
LL Lucas(LL N,LL M,LL P)
{if(M==0)return 1ll;if(N<P&&M<P)return C(N,M,P);LL c=C(N%P,M%P,P);  if(!c)return 0ll;LL L=Lucas(N/P,M/P,P);return (c*L)%P;
}
int main()
{int T=gi();J[0]=A[1]=J[1]=1;for(LL i=2;i<Mod;++i)A[i]=((Mod-Mod/i)*A[Mod%i])%Mod;for(LL i=2;i<Mod;++i)J[i]=(J[i-1]*i)%Mod;while(T--){n=gi();m=(gi()-gi());m=-m+1;printf("%lld\n",(Lucas(n+m,n,Mod)-1+Mod)%Mod);}return 0;
}

转载于:https://www.cnblogs.com/fenghaoran/p/6592128.html

BZOJ4403 序列统计—Lucas你好相关推荐

  1. 组合计数——车的放置(逆元)+数三角形+序列统计(lucas定理)

    通用传送门:https://www.acwing.com/activity/content/16/ 思路:设C(a,b)为从a中取出b个的组合数,设A(a,b)从a中选出b个进行排列的排列数. 对于题 ...

  2. [BZOJ4403]序列统计

    题意:给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. 我的数学好差啊... 推式子见:http://www.cnblog ...

  3. P3321 [SDOI2015]序列统计(离散对数下NTT,乘法换加法)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P3321 Prob ...

  4. Luogu P3321 [SDOI2015]序列统计

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

  5. 洛谷 - P3321 [SDOI2015]序列统计(原根+NTT)

    题目链接:点击查看 题目大意:给出一个集合 SSS,集合中的数是 [0,m)[0,m)[0,m) 且互不相同的,问从集合中选 nnn 次数字,且乘积对 mmm 取模后等于 xxx 的方案数有多少 题目 ...

  6. P3321 [SDOI2015]序列统计(未解决)

    P3321 [SDOI2015]序列统计 题意: 题解: 参考题解: 题解 P3321 [[SDOI2015]序列统计] [LG3321][SDOI2015]序列统计 神仙题..学透再补 代码:

  7. [SDOI2015]序列统计

    [SDOI2015]序列统计 很有趣的一道题目,很巧妙. 显然是一个dp,考虑最朴素的dp,f[i][j]表示选i个乘起来,%m为j的方案数为多少.转移也很简单. 然而乘法的转移并不能进行什么优化,于 ...

  8. Bailian4077 出栈序列统计【卡特兰数】(vijos P1122)

    问题链接:vijos P1122 出栈序列统计. 出栈序列统计 总时间限制: 100ms 内存限制: 64kB 描述 栈是常用的一种数据结构,有n个元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列.你 ...

  9. 算法学习FFT系列(2):快速数论变换NTT bzoj3992: [SDOI2015]序列统计例题详解

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

最新文章

  1. jQuery选择器和选取方法 http://www.cnblogs.com/MaxIE/p/4078869.html
  2. opengl层次建模_层次建模简介
  3. 2021高考池州成绩查询,2021池州高考信息网
  4. mysql中union,左连接,右连接,与内连接
  5. json标签批量转为xml标签(VOC数据集制作)
  6. 迷宫最短路径-货郎担问题的解决思路
  7. php ZipArchive 压缩整个文件夹 - 自带ZipArchive类 - PHP递归创建目录压缩包
  8. db2 sqlcode常见及不常见
  9. 【车牌识别】基于模板匹配算法实现车牌识别matlab源码
  10. pandas安装了但是import不了
  11. c语言数组及其下标引用,C语言之数组下标引用与间接引用
  12. 6自由度串联机器人D-H建模方法
  13. 小虎整合:电商浏览器插件工具常用的有哪些?在哪里可以找到?
  14. Encoder-Decoder
  15. 成功解决ValueError: pos_label=1 is not a valid label: array([‘0‘, ‘1‘], dtype=‘<U1‘)
  16. 解决操作无法完成,因为其中的文件夹或文件已在另一程序中打开的问题
  17. greenplum时区避坑
  18. php 怎么调用git,Git怎么用
  19. 交错数组 c语言,C#中的数组,多维数组和交错数组
  20. ASP.NET开发工具Web Matrix介绍

热门文章

  1. Oracle使用ini启动,python操作ini类型配置文件的实例教程
  2. 前端JavaScripts基础知识点讲义代码
  3. 《编译原理》实验教学大纲
  4. 系统分析之100亿级日志系统是怎么设计出来的?
  5. 芯片巨头们2019年的AI芯片之争会如何?
  6. 列运算_Power Query列运算的几种方法比较
  7. formdata怎么传数组_如何使用formData上传file数组
  8. Redux-学习笔记
  9. 桌面快速启动软件AltRun----赶快使得你的桌面变整洁吧
  10. 直方图均衡算法及结合自动色阶的改进