BZOJ-4403: 序列统计 (Lucas+排列组合)

4403: 序列统计

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 1021  Solved: 477
[Submit][Status][Discuss]

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

By yts1999

http://blog.csdn.net/qq_34025203/article/details/50920189

线性求逆元证明:其中ak+b=mod  --->  k=mod/a b=mod%a 所以1/a=-(p/a)*inv[p%a]

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 typedef long long LL;
 4 const int mod=1e6+3;
 5 LL fac[mod],inv[mod];
 6 void init(){
 7     int i,j;
 8     fac[0]=inv[1]=inv[0]=1;
 9     for (i=1;i<mod;i++) fac[i]=fac[i-1]*i%mod;
10     for (i=2;i<mod;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
11     for (i=1;i<mod;i++) inv[i]=inv[i]*inv[i-1]%mod;
12 }
13 inline long long  Lucas(int n,int m){
14     if (n<m) return 0;
15     if (n<mod && m<mod) return fac[n]*inv[m]%mod*inv[n-m]%mod;
16     return Lucas(n/mod,m/mod)*Lucas(n%mod,m%mod)%mod;
17 }
18 int main(){
19     freopen ("count.in","r",stdin);freopen ("count.out","w",stdout);
20     int i,j,t,n,L,R;
21     init();
22     scanf("%d",&t);
23     while (t--){
24         scanf("%d%d%d",&n,&L,&R);
25         int len=R-L+1;
26         printf("%d\n",(Lucas(n+len,len)+mod-1)%mod);
27     }
28     return 0;
29 }
时间: 2024-08-14 11:18:45

BZOJ-4403: 序列统计 (Lucas+排列组合)的相关文章

bzoj 4403 序列统计

4403: 序列统计 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 858  Solved: 413[Submit][Status][Discuss] 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^

bzoj 4403 序列统计 卢卡斯定理

4403:序列统计 Time Limit: 3 Sec  Memory Limit: 128 MB Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input 输入第一行包含一个整数T,表示数据组数.第2到第T+1行每行包含三个整数N.L和R,N.L和R的意义如题所述. Output 输出包含T行,每行有一个数字,表示你所求出的答案对106+3取模的结果. Sample Input 2 1 4

【BZOJ 4403】 4403: 序列统计 (卢卡斯定理)

4403: 序列统计 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 653  Solved: 320 Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input 输入第一行包含一个整数T,表示数据组数.第2到第T+1行每行包含三个整数N.L和R,N.L和R的意义如题所述. Output 输出包含T行,每行有一个数字,表示你所求出的答案对106+3

[Lucas定理][组合] Bzoj P4403 序列统计

Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. 题解 我们要求长度为n的元素在[1..r-l+1]中的单调不下降序列的数量 考虑将第i个元素加上i-1,那么每个合法序列就会对应一个长度为n,元素为[1..n+m-1]中的单调递增的序列数量 显然两者是一一对应的,那么就只用统计后面的贡献 那么就是在n+m-1个元素中选n个,就是C(n+m-1,n) 所以答案就是C(m,n+m)-1,然后用luc

BZOj-4591: [Shoi2015]超能粒子炮&#183;改 (Lucas+排列组合)

4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 960  Solved: 360[Submit][Status][Discuss] Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提升.它有三个参数n,k.它会 向编号为0到k的位置发射威力为C(

[BZOJ 2729][HNOI2012]排队(排列组合+高精)

Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) Solution 好像必须写压位高精的QAQ 先排n名男生,插空,讨论两名老师插在两个不同的空里的情况和先排在一起再在中间插一名女生的情况 #include<iostream> #include<cstdio> #include<cstring> #include&

bzoj 3505 [Cqoi2014]数三角形——排列组合

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505 好题!一定要经常回顾! 那个 一条斜线上的点的个数是其两端点横坐标之差和纵坐标之差的gcd-1 真是很妙. https://blog.csdn.net/u012288458/article/details/48624859 https://www.cnblogs.com/Var123/p/5377616.html 然而还可以递推?https://www.cnblogs.com/liu

BZOJ 3992: [SDOI2015]序列统计 [快速数论变换 生成函数 离散对数]

3992: [SDOI2015]序列统计 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1017  Solved: 466[Submit][Status][Discuss] Description 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数列中的每个数都属于集合S. 小C用这个生成器生成了许多这样的数列.但是小C有一个问题需要你的帮助:给定整数x,求所有可以生成出的,且满足数列中

【原创】开源.NET排列组合组件KwCombinatorics使用(一)——生成组合序列

你还可以参考本博客其他.NET开源项目的相关文章: [原创]彩票预测算法:离散型马尔可夫链模型          Newlife XCode组件资源目录汇总[2013年版] [原创]开源.NET下的XML数据库介绍及入门          [原创].NET开源压缩组件介绍与入门 [开源].NET开源表达式计算组件介绍与使用          [原创]开源Word读写组件DocX介绍与入门 [原创]Matlab.NET混编调用Figure窗体                [原创]Matlab与.