题目链接: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. 计算机原理学习(2)-- 存储器和I/O设备和总线

    前言 前一篇文章介绍了冯诺依曼体系结构的计算机的基本工作原理,其中主要介绍了CPU的结构和工作原理.这一篇主要来介绍存储区,总线,以及IO设备等其他几大组件,来了解整个计算机是如何工作的. 这些东西都 ...

  2. MojoliciousLite: 实时的web框架 概述

    MojoliciousLite: 实时的web框架: SYNOPSIS 简介: # Automatically enables "strict", "warnings&q ...

  3. oracle导入导出exp,imp

    exp dadifilm/oracle@dg file=/tmp/dadi.dmp full=y imp u_data/321@dg1  file=/dadi_desc.dmp Import: Rel ...

  4. NYOJ306 走迷宫(dfs+二分搜索)

    题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不 ...

  5. 读写分离提高 SQL Server 并发性

    转自:http://www.canway.net/Lists/CanwayOriginalArticels/DispForm.aspx?ID=476 在一些大型的网站或者应用中,单台的SQL Serv ...

  6. Unity5UGUI 官方教程学习笔记(三)UI BUTTON

    Button Interactable :为了避免与该按钮产生交互,可以设置它为false Transition: 管理按钮在正常情况 ,按下,经过时的显示状态  None  按钮整正常工作 但是在按 ...

  7. OpenGL学习之windows下安装opengl的glut库

    OpenGL学习之windows下安装opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装.  Windows环境下的GLUT下载地址:(大小约为15 ...

  8. 【LeetCode题意分析&解答】34. Search for a Range

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  9. printf与scanf的返回值、注意点

    printf()的返回值为其输出字符串常量的字符数(注意字符数与字数的区别)注意计数针对所有的打印字符,包括空格和不可见的换行字符(不包括字符串的空字符). scanf()函数返回成功读入的项目的个数 ...

  10. [问题解决] Tomcat Child not unique

    错误: child not unique   发生场景: tomcat服务器   解决方案: 将tomcat中的server.xml文件配置: <Host name="localhos ...