bzoj4403:序列统计
我好傻啊
先来看看长度只能为\(n\)的情况
那么答案非常显然是\(\binom{m+n-1}{n}\)
其中\(m=R-L+1\)
因为我们要构造一个非降序列,显然可能一个数会被选择多次,组合非常不好做,于是我们可以把每一个数的下标加上其对应的下标那么现在的值域范围就变成了\([L+1,R+n]\),从这个区间里选数的话,我们把选出来的数减去选好之后对应的下标,发现得到的数就来自于原来的\([L,R]\),于是就变成了从\(R+n-L-1+1=n+m-1\)里选择的\(n\)个数,就是\(\binom{n+m-1}{n}\)
也可以这样理解,视为把\(n\)个小球放到\(m\)个盒子里,这样的话多个小球可以放到同一个盒子里,就对应着一个数可以被选择多次,盒子也可以是空着的,对应着一个数可以不被选择,根据插板法,这样的方案数就是\(\binom{n+m-1}{m-1}=\binom{n+m-1}{n}\)
现在的问题变成了求
\]
之后画一下柿子就是\(\binom{n+m}{m}=\binom{n+m}{n}\)
之后上\(Lucas\)就好了
#include<iostream>
#include<cstring>
#include<cstdio>
#define LL long long
#define re register
#define maxn 1000005
const LL mod=1000003;
inline int read()
{
char c=getchar();
int x=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x;
}
LL fac[maxn],inv[maxn];
inline LL C(LL n,LL m)
{
if(!m) return 1;
if(!n) return 0;
if(n==m) return 1;
if(m>n) return 0;
return fac[n]*inv[fac[m]*fac[n-m]%mod]%mod;
}
LL Lucas(LL n,LL m)
{
if(!m) return 1;
if(!n) return 0;
if(n<mod&&m<mod) return C(n,m);
return C(n%mod,m%mod)*Lucas(n/mod,m/mod)%mod;
}
int n,m,T,L,R;
int main()
{
T=read();
fac[0]=1;
for(re int i=1;i<=mod;i++) fac[i]=fac[i-1]*i%mod;
inv[1]=1;
for(re int i=2;i<=mod;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
while(T--)
{
n=read(),L=read(),R=read();
m=R-L+1;
printf("%lld\n",(Lucas(n+m,m)-1+mod)%mod);
}
return 0;
}
bzoj4403:序列统计的更多相关文章
- BZOJ4403 序列统计—Lucas你好
绝对是全网写的最详细的一篇题解 题目:序列统计 代码难度:简单 思维难度:提高+-省选 讲下题面:给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案 ...
- BZOJ4403: 序列统计【lucas定理+组合数学】
Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input 输入第一行包含一个整数T,表示数据组 ...
- 2018.09.09 bzoj4403: 序列统计(Lucas定理)
传送门 感觉单调不降序列什么的不好做啊. 于是我们序列中下标为i的元素的值加上i,这样就构成了一个单调递增的序列. 问题就变成了: 求出构造长度分别为1 ~ n且每个元素的值在l+1 ~ r+n之间的 ...
- bzoj4403 序列统计——组合数学
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4403 一开始想了个 O(n) 的做法,不行啊... O(n)想法是这样的:先考虑递推,设 f ...
- bzoj4403: 序列统计
我们很容易发现答案是C(R-L+N+1,N)-1 然后用一下lucas定理就行了 #include <iostream> #include <cstdio> #include ...
- 【BZOJ4403】序列统计(组合数学,卢卡斯定理)
[BZOJ4403]序列统计(组合数学,卢卡斯定理) 题面 Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取 ...
- 【BZOJ4403】序列统计 Lucas定理
[BZOJ4403]序列统计 Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input 输入第 ...
- Bzoj 4403: 序列统计 Lucas定理,组合数学,数论
4403: 序列统计 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 328 Solved: 162[Submit][Status][Discuss] ...
- BZOJ 3992: [SDOI2015]序列统计 [快速数论变换 生成函数 离散对数]
3992: [SDOI2015]序列统计 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1017 Solved: 466[Submit][Statu ...
- [SDOI2015]序列统计
[SDOI2015]序列统计 标签: NTT 快速幂 Description 给你一个模m意义下的数集,需要用这个数集生成一个数列,使得这个数列在的乘积为x. 问方案数模\(1004535809\). ...
随机推荐
- 如鹏网学习笔记(十一)JQuery
一.jQuery简介 jQuery是一个JavaScript库,特性丰富,包含若干对象和很多函数,可以替代传统DOM编程的操作方式和操作风格 jQuery通过对DOM API.DOM事件的封装,提供了 ...
- git远程易错点
git pull下来用git branch -r查看远程分支才有数据 解决方案:指定当前工作目录工作分支,跟远程的仓库,分支之间的链接关系. 比如我们设置master对应远程仓库的master分支 g ...
- HTTP 错误500.19 - 错误代码 0x80070021
1.错误描述 HTTP 错误500.19 -Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息 模块 IIS Web Core 通知 Begi ...
- 关于Bootstrap的悬浮窗口(popover)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Android学习笔记(3)----手机调试[OFFLINE]的解决方式
问题描述 今天用Android Studio开发了一个简单的调用摄像头的App,结果想调试的时候发现选择调试设备的对话框中,手机名称后面总是跟着一个[OFFLINE]的标识,只能选择启动AVD来进行调 ...
- Wasserstein GAN最新进展:从weight clipping到gradient penalty,更加先进的Lipschitz限制手法
前段时间,Wasserstein GAN以其精巧的理论分析.简单至极的算法实现.出色的实验效果,在GAN研究圈内掀起了一阵热潮(对WGAN不熟悉的读者,可以参考我之前写的介绍文章:令人拍案叫绝的Was ...
- Python Basics
廖雪峰老师博客 1. 可变参数(例如 *nums),允许传入一个list 或 tuple,但是 关键字参数(例如 **kv),允许传入一个dict,具体可参考此页: 2. set与dict类似,但只是 ...
- QT开发(一)Vs2013集成 QT5.3.1
原文:http://www.cnblogs.com/aoldman/p/3860837.html 很久不写随笔了,真是越来越懒.最近公司要做一款产品,想使用QT不用WPF lol,让苦逼的.net的我 ...
- How do I use the API correctly
1:打开帮助文档2:点击显示,找到索引,看到输入框3:你要学习什么内容,你就在框框里面输入什么内容 举例:Random4:看包 java.lang包下的类在使用的时候是不需要导包的5:看类的描述 Ra ...
- selenium元素定位方法
一.如何找到页面元素 Webdriver的findElement方法可以用来找到页面的某个元素,最常用的方法是用id和name查找.下面介绍几种比较常用的方法. 1.1By ID 假设页面写成这样:i ...