题目链接: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定理)的更多相关文章

  1. 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix

    Tom and matrix Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=5226 Mean: 题意很简单,略. analy ...

  2. HDU 4349 Xiao Ming's Hope lucas定理

    Xiao Ming's Hope Time Limit:1000MS     Memory Limit:32768KB  Description Xiao Ming likes counting nu ...

  3. hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)

    DP? Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0 ...

  4. 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] ...

  5. 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 ...

  6. HDU 3037 Saving Beans (数论,Lucas定理)

    题意:问用不超过 m 颗种子放到 n 棵树中,有多少种方法. 析:题意可以转化为 x1 + x2 + .. + xn = m,有多少种解,然后运用组合的知识就能得到答案就是 C(n+m, m). 然后 ...

  7. lucas 定理学习

    大致意思就是求组合数C(n , m) % p的值, p为一个偶数 可以将组合数的n 和 m都理解为 p 进制的表示 n  = ak*p^k + a(k-1)*p^(k-1) + ... + a1*p ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. Bzoj 4403: 序列统计 Lucas定理,组合数学,数论

    4403: 序列统计 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 328  Solved: 162[Submit][Status][Discuss] ...

随机推荐

  1. Java HashSet和LinkedHashSet的用法

    Java HashSet和LinkedHashSet的用法 类HashSet和LinkedHashSet都是接口Set的实现,两者都不能保存重复的数据.主要区别是HashSet不保证集合中元素的顺序, ...

  2. poj2521---lose money

    #include <stdio.h> #include <stdlib.h> int rever(int n) { return -n; } int main() { int ...

  3. C++_bool

    1 0 #include <iostream> using namespace std; void main() { && || || - && ; std ...

  4. C++_auto

    自动变量,自动获取类型,输出,泛型 自动变量,可以实现自动循环一维数组 自动循环的时候,对应的必须是常量 //auto自动变量,自动匹配类型 #include <iostream> usi ...

  5. 使用AFNetworking请求新浪微博数据接口出错解决办法

    在使用AFNetworking请求新浪微博数据接口时会出这样的错误,如 这样的错误说明,AFNetworking无法处理这样的数据格式.所以,我们需要修改AFNetworking中的一些接收数据格式. ...

  6. getHibernateTemplate().saveOrUpdate 不运行

    在ssh中使用hibernateTemplate来保存对象的时候.出现一个问题,就是saveOrUpdate既不报错.也不在控制台打印插入语句,也不想数据库插入数据. 问题解决: 这个是事务的原因.检 ...

  7. Android Popupwindow 拖动

    版本号:1.0 日期:2014.4.29 版权:© 2014 kince 转载注明出处 关于View的拖动大家应该比較了解了,比方对一个控件IamgeView拖动,或者一个视图View拖动,实现方式也 ...

  8. Swift语言iOS8的蓝牙Bluetooth解析

    开发中央步骤: 1.添加CoreBluetooth.framework框架到你的工程 2.继承两个协议:CBCentralManagerDelegate和CBPeripheralDelegate 个人 ...

  9. 开源ceph管理平台inkscope部署手册

    一.前情提要 关于inkscope就不做过多介绍了,就是ceph的一个开源管理控制平台,跟ceph官方的calamary以及intel的VSM差不多一类,只是各自侧重点不一样. 相对而言,因为inks ...

  10. prototype演变

    setp1 var Person = function () {}; //构造器 var p = new Person(); setp1 演变: var Person = function () {} ...