[组合数学] BZOJ 4403 序列统计
2016-05-20 16:24
507 查看
就是个m元线性方程的非负整数解个数
C(n+m-1,m-1) 嘛
C(n+m-1,m-1) 嘛
#include<cstdio> #include<cstdlib> using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p1++; } inline void read(ll &x) { char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b; } const ll P=1000003; ll fac[P+10],inv[P+10]; inline void Pre() { fac[0]=1; for (int i=1;i<P;i++) fac[i]=fac[i-1]*i%P; inv[1]=1; for (int i=2;i<P;i++) inv[i]=(P-P/i)*inv[P%i]%P; inv[0]=1; for (int i=1;i<P;i++) (inv[i]*=inv[i-1])%=P; } inline ll C(ll n,ll m) { if (m>n) return 0LL; if (n<P && m<P) return fac *inv[m]%P*inv[n-m]%P; return C(n/P,m/P)*C(n%P,m%P)%P; } int main() { Pre(); ll Q,n,m,l,r; freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(Q); while (Q--) { read(n); read(l); read(r); m=r-l+1; printf("%lld\n",(C(n+m,n)-1+P)%P); } return 0; }
相关文章推荐
- <从PAXOS到ZOOKEEPER分布式一致性原理与实践>读书笔记-zookeeper全局唯一id生成
- 习题8-7 UVA - 11925 Generating Permutations 生成排列(构造)
- uva122--二叉树的层次遍历
- Linux灰常重要命令—find命令
- DHCP
- overflow:hidden属性
- JAVA线程 -- wait notify notifyAll
- IIS7与IIS6之功能比较
- BabeLua秒启调试补丁1.08,支持Quick, 支持VS2013和VS2015(2016.6.21更新)
- 基于CSS和JavaScript创建动画式谷歌地图标记
- spring boot controller路由 url 扫描不到问题
- 如何使用shape来画半圆和画虚线
- linux误操作删除掉var(rm /var/*)目录导致的问题,及解决方法
- Android Studio 快捷键使用
- 线程
- Android 自定义日历控件
- 输入法评价
- cocoapod 安装
- zepto tap “点透”的解决
- Triangle