HDU 5226 Tom and matrix(组合数学+Lucas定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5226
题意:给一个矩阵a,a[i][j] = C(i,j)(i>=j) or 0(i < j),求(x1,y1),(x2,y2)这个子矩阵里面的所有数的和。
思路:首先可以推导出一个公式C(n,i)+C(n + 1,i)+...+C(m,i) = C(m + 1,i + 1)
知道了这个公式,就可以将子矩阵里每行(或每列)的和值表示成组合数的差值,现在的关键是求出C(n,m)(mod p).
由于n和m可能很大,p很小,不能直接求,要借助Lucas定理。关于Lucas定理,可参考:http://www.cnblogs.com/zxndgv/archive/2011/09/17/2179591.html。
code:
#include <cstdio>
typedef __int64 LL;
const int MAXN = ;
int p;
LL fac[MAXN]; // 得到阶乘 fac[i] = i! % p
void GetFact()
{
fac[] = ;
for (LL i = ; i < MAXN; ++i)
fac[i] = fac[i - ] * i % p;
} // 快速模幂 a^b % p
LL Pow(LL a, LL b)
{
LL temp = a % p;
LL ret = ;
while (b)
{
if (b & ) ret = ret * temp % p;
temp = temp * temp % p;
b >>= ;
}
return ret;
} /*
欧拉定理求逆元
(a / b) (mod p) = (a * x) (mod p) x表示b的逆元 并且 b * x = 1 (mod p) 只有b和p互质才存在逆元 b * x = 1 (mod p) x是b关于p的逆元 b^phi(p) = 1 (mod p) b * b^(phi(p) - 1) (mod p) = b * x (mod p) x = b^(phi(p) - 1) = b^(p - 2) (a / b) (mod p) = (a * x) (mod p) = (a * b^(p - 2)) (mod p) 经过上面的推导,得出: (a / b) (mod p) = (a * b^(p - 2)) (mod p) (b 和 p互质) */
LL Cal(LL n, LL m)
{
if (m > n) return ;
return fac[n] * Pow(fac[m] * fac[n - m], p - ) % p;
} LL Lucas(LL n, LL m)
{
if (m == ) return ;
return Cal(n % p, m % p) * Lucas(n / p, m / p) % p;
} int main()
{
int x1, y1, x2, y2;
while (scanf("%d %d %d %d %d", &x1, &y1, &x2, &y2, &p) == )
{
if (x2 < y1) // 预判 子矩阵全部0值区域
{
printf("0\n");
continue;
}
if (x2 == y1) // 预判 子矩阵只有右上角值为1,其余为0
{
printf("1\n");
continue;
}
GetFact();
if (x1 < y1) x1 = y1;
if (y2 > x2) y2 = x2;
LL ans = ;
for (int i = y1; i <= y2; ++i)
{
if (i > x1)
ans = (ans + Lucas(x2 + , i + )) % p;
else
ans = (ans + Lucas(x2 + , i + ) - Lucas(x1 + , i + ) + Lucas(x1, i)) % p;
}
printf("%I64d\n", ans);
}
return ;
}
HDU 5226 Tom and matrix(组合数学+Lucas定理)的更多相关文章
- 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
Tom and matrix Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5226 Mean: 题意很简单,略. analy ...
- HDU 4349 Xiao Ming's Hope lucas定理
Xiao Ming's Hope Time Limit:1000MS Memory Limit:32768KB Description Xiao Ming likes counting nu ...
- hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)
DP? Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0 ...
- HDU 3304 Interesting Yang Yui Triangle lucas定理
输入p n 求杨辉三角的第n+1行不能被p整除的数有多少个 Lucas定理: A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0] ...
- HDU 4349 Xiao Ming's Hope [Lucas定理 二进制]
这种题面真是够了......@小明 题意:the number of odd numbers of C(n,0),C(n,1),C(n,2)...C(n,n). 奇数...就是mod 2=1啊 用Lu ...
- HDU 3037 Saving Beans (数论,Lucas定理)
题意:问用不超过 m 颗种子放到 n 棵树中,有多少种方法. 析:题意可以转化为 x1 + x2 + .. + xn = m,有多少种解,然后运用组合的知识就能得到答案就是 C(n+m, m). 然后 ...
- lucas 定理学习
大致意思就是求组合数C(n , m) % p的值, p为一个偶数 可以将组合数的n 和 m都理解为 p 进制的表示 n = ak*p^k + a(k-1)*p^(k-1) + ... + a1*p ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- Bzoj 4403: 序列统计 Lucas定理,组合数学,数论
4403: 序列统计 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 328 Solved: 162[Submit][Status][Discuss] ...
随机推荐
- Cocos2d-x CCNotificationCenter 通知中心
相信接触过ios开发的人来说对NSNotificationCenter都不陌生.而在cocos2d-x中也参照这个类,提供了CCNotificationCenter这个类,用作通知中心. 那么Noti ...
- 柯南君:看大数据时代下的IT架构(7)消息队列之RabbitMQ--案例(routing 起航)
二.Routing(路由) (using the Java client) 在前面的学习中,构建了一个简单的日志记录系统,能够广播所有的日志给多个接收者,在该部分学习中,将添加一个新的特点,就是可以只 ...
- js获取手机重力感应api
<html> <head> <title>DeviceOrientationEvent</title> <meta charset="U ...
- 【菜鸟学习Linux】-第三章- Linux环境搭建-使用VMware9安装Ubuntu 12.04系统
上一步,我们安装了VMware9虚拟机,现在我们就是用它来安装Ubuntu12.04系统,至于Ubuntu是什么,我就不废话了,大家google一下,比我讲的清楚,好了,开始干活! Ubuntu官网下 ...
- Android 读取Assets中图片
bgimg0 = getImageFromAssetsFile("Cat_Blink/cat_blink0000.png"); * * 从Assets中读取图片 */ privat ...
- .Net C# ASP.Net和ADO.Net
1.NET是一个平台,一个抽象的平台的概念. .NET平台其本身实现的方式其实还是库,抽象层面上来看是一个平台. .NET Framework包括两个关键组成元素: a.Common Language ...
- 母版页中ContentPlaceHolder 控件的作用
文章转自 http://wenku.baidu.com/link?url=7sLN0ihgZQ1XfX47b_y8qbpIVjS5T75Q1xvaoyIQ6OiKIgvzyVyRccnU9e9fqo ...
- java中关于SSL/TSL的介绍和如何实现SSL Socket双向认证
一. SSL概述 SSL协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对称加密算法将数据加密后进行传输以保证数据的保密性,并且通过计算数字摘要来验证数据在传 ...
- 笔记-AndroidStudio开发环境的搭建
首先当然是下载AndroidStudio,目前最新的稳定版是1.1 然后下载studio版本的sdk,如果用原装sdk,需要更新 安装的过程中会选择sdk的路径,此时如果已经解压了原装sdk,会进 ...
- Svn服务启动的两种方式
一.svn服务器启动 cmd命令行启动:vsvnserve -d –r 文档仓库路径 -d 后台执行 -r 版本库的根目录 二.Windows服务自动启动 利用xp.2000 以上的 ...