好的,我将这道题整理为清晰的题面格式,并补充样例解释、数据范围与时空限制:
题目描述
原题来自:BZOJ 4403
给定三个正整数 N,L 和 R,统计长度在 1 到 N 之间,元素大小都在 L 到 R 之间的单调不降序列的数量。输出答案对 106+3(即 1000003)取模的结果。
输入格式
输入第一行包含一个整数 T,表示数据组数。
接下来 T 行,每行包含三个整数 N,L,R,含义如题目描述。
输出格式
输出包含 T 行,每行一个整数,表示所求答案对 1000003 取模的结果。
样例
样例输入
2
1 4 5
2 4 5
样例输出
2
5
样例解释
第一组:N=1,L=4,R=5
可能的序列长度 =1,元素范围 [4,5]
序列有:{4},{5},共 2 个。
第二组:N=2,L=4,R=5
序列长度可以是 1 或 2。
长度 1 的序列:{4},{5}(共 2 个)
长度 2 的单调不降序列:{4,4},{4,5},{5,5}(共 3 个)
总数为 2+3=5。
数据范围
对于全部输入:
- 1≤N,L,R≤109
- 1≤T≤100
- 保证 L≤R
时空限制
- 时间:1000 ms
- 内存:524288 KB
提示
设 m=R−L+1,即元素可选的种类数。
长度固定为 k 的单调不降序列(元素范围 [L,R])的个数等于 Cm+k−1k(隔板法或映射到不降序列的组合数公式)。
因此,答案为:
k=1∑NCm+k−1k
其中 m=R−L+1。
利用组合恒等式 ∑k=0NCm+k−1k=Cm+NN,可得:
k=1∑NCm+k−1k=Cm+NN−1
因此问题转化为计算 Cm+NNmod1000003,其中 m+N 可能非常大(达到约 2×109),但模数 1000003 是质数,可以使用 Lucas 定理 进行计算。