HDU 5226 Tom and matrix 组合数求和+Lucas定理.
来源:互联网 发布:图片设计软件 编辑:程序博客网 时间:2024/05/20 17:09
HDU 5226
题意:1e5*1e5的矩阵.当i<j时,a[i][j]=0; 当i>j时,a[i][j]=C(i,j).
现在给出(x1,y1),(x2,y2) 求子矩阵的和 x1,y1,x2,y2<=1e5.
求子矩阵和 尝试用二维前缀和来解决.则要知道(0,0)到(x,y)的和.
容易知道(0,x)行的第i列秩和 0+..0+C(i,i)+C(i+1,i)+...C(x,i) = C(x+1,i+1) (x+1件物品中取i+1件,最后一件为i+1,i+2,...x+1).
O(n)遍历列 前缀和减一减即可.
题意:1e5*1e5的矩阵.当i<j时,a[i][j]=0; 当i>j时,a[i][j]=C(i,j).
现在给出(x1,y1),(x2,y2) 求子矩阵的和 x1,y1,x2,y2<=1e5.
求子矩阵和 尝试用二维前缀和来解决.则要知道(0,0)到(x,y)的和.
容易知道(0,x)行的第i列秩和 0+..0+C(i,i)+C(i+1,i)+...C(x,i) = C(x+1,i+1) (x+1件物品中取i+1件,最后一件为i+1,i+2,...x+1).
O(n)遍历列 前缀和减一减即可.
p是素数可大可小,在套一下Lucas定理:C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5;ll f[N],inv[N],x,y,x2,y2,p;ll powmod(ll x,ll n){ ll s=1; while(n) { if(n&1) s=(s*x)%p; x=(x*x)%p; n>>=1; } return s;}void init(){ f[0]=inv[0]=1; for(int i=1;i<N;i++) { f[i]=(f[i-1]*i)%p; inv[i]=powmod(f[i],p-2); }}ll C(int n,int m){ if(n<m) return 0; return f[n]*inv[n-m]%p *inv[m] %p;}ll Lucas(int n,int m){ if(n<p&&m<p) return C(n,m); return Lucas(n/p,m/p)*Lucas(n%p,m%p)%p;}ll work(int x,int y){ ll res=0; for(int i=0;i<=y;i++) res=(res+Lucas(x+1,i+1))%p; return res;}int main(){ while(cin>>x>>y>>x2>>y2>>p) { init(); ll ans=0; ans=(ans+work(x2,y2)); if(y) ans=(ans-work(x2,y-1)+p)%p; if(x) ans=(ans-work(x-1,y2)+p)%p; if(x&&y) ans=(ans+work(x-1,y-1)+p)%p; printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- HDU 5226 Tom and matrix 组合数求和+Lucas定理.
- 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
- hdu 5226 Tom and matrix,lucas定理
- hdu 5226 Tom and matrix(Lucas定理)
- hdu 5226 Tom and matrix (推公式,lucas)
- HDU5226 Tom and matrix(BestCoder Round #40)(lucas定理)
- 【Lucas】 HDOJ 5226 Tom and matrix
- [HDU 3944] DP?组合数 Lucas定理
- HDU 5226 Tom and matrix
- hdu 5226 Tom and matrix
- hdu 5226 Tom and matrix
- HDU 5226 Tom and matrix
- 组合数/Lucas定理
- hdu 3037 费马小定理+逆元求组合数+Lucas定理
- hdu5226 Tom and matrix 公式,Lucas
- 组合数中的Lucas定理
- hdu3037 组合数 lucas定理
- Lucas定理求组合数
- SVAC1.0逆扫描反变换反量化分析
- 优秀工程师-UITableView
- drop、truncate和delete的区别
- HDPCD-Java-复习笔记(15)
- js如何获取哪些复选框被选中
- HDU 5226 Tom and matrix 组合数求和+Lucas定理.
- H5与android客户端JS交互方案
- vue初识
- [iOS]APP中保存图片到相册时崩溃
- JavaSE基础-01-对象
- 阿里云移动测试平台使用教程
- Dispatcher
- Azure 虚拟机上的 SQL Server 常见问题
- [题解] NOI2002 银河英雄传说 (并查集)