博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 4403 序列统计
阅读量:4573 次
发布时间:2019-06-08

本文共 1195 字,大约阅读时间需要 3 分钟。

4403: 序列统计

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 858  Solved: 413
[][][]

Description

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

Input

输入第一行包含一个整数T,表示数据组数。
第2到第T+1行每行包含三个整数N、L和R,N、L和R的意义如题所述。
1≤N,L,R≤10^9,1≤T≤100,输入数据保证L≤R。

Output

输出包含T行,每行有一个数字,表示你所求出的答案对10^6+3取模的结果。

Sample Input

2
1 4 5
2 4 5

Sample Output

2
5
//【样例说明】满足条件的2个序列为[4]和[5]。

HINT

 

Source

 

令M=r-l+1

根据多重集合的组合公式

ans= Σ C(M-1,i+M-1)  i∈[1,n]

然后 通过公式

C(M,M-1)=C(M+1,M)-1

C(M,N)= C(M-1,N)+ C(M-1,N-1)

可 化简 得 ans= C(M+N,M)-1

             

#include
using namespace std;typedef long long LL;const int p=1e6+3;LL f[p+1];void pre(){ f[0]=1; for(int i=1;i<=p;i++) f[i]=f[i-1]*i%p;}int pow(LL a,int b){ LL r=1; while(b) { if(b&1) r*=a,r%=p; b>>=1; a*=a; a%=p; } return r;}int C(int n,int m){ if(m>n) return 0; return f[n]*pow(f[m]*f[n-m]%p,p-2)%p;}int Lucas(int n,int m){ LL ans=1; for(;m;n/=p,m/=p) ans=ans*C(n%p,m%p)%p; return ans;}int main(){ int T,n,l,r; pre(); scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&l,&r); printf("%d\n",(Lucas(r-l+1+n,r-l+1)-1+p)%p); } }

 

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/7359864.html

你可能感兴趣的文章
正则表达式
查看>>
bzoj1385 [Baltic2000]Division expression
查看>>
字符的读入问题
查看>>
五子棋计算思路
查看>>
83. 移除已排序链表中重复的节点 Remove Duplicates from Sorted List
查看>>
linux的联网以及语言的更改
查看>>
145-PHP 使用<<<和HTML混编(一)
查看>>
栈的顺序存储结构以及实现
查看>>
【python】-- Socket粘包问题 ,解决粘包的几种方法、socket文件下载,md5值检验
查看>>
2016-09-12
查看>>
CDHD驱动器——ServoStudio配置高创伺服速度模式不转
查看>>
完整版本的停车场管理系统源代码带服务端+手机android客户端
查看>>
【UOJ 92】有向图的强联通分量
查看>>
bzoj 1192
查看>>
Windows10/Servers 2016的TrustedInstaller权限获取(及乱改System后救砖
查看>>
关于mysql转移数据库时没有导出sql脚本的情况下,如何导入数据到新的数据库中...
查看>>
链表逆序
查看>>
[zz]链表倒序
查看>>
简单易用的图像解码库介绍 —— stb_image
查看>>
【漏洞复现】永恒之蓝 ms17-010 漏洞利用 攻击手法
查看>>