a[i][j] = a[i-1][j] + a[i][j-1]

m.特别大,可以计算出第一列,找出规律,构建一个特殊的矩阵,运用快速幂

设矩阵x:

1 0 0 0 ... |10 1

1 1 0 0 ... |10 1

1 1 1 0 ...  |10 1

1 1 1 1 ...   |10 1

......      ...  | ...

0 0 0 0 ... |10 1

0 0 0 0 ... | 0 1

用最后两行来实现 233.....,求出x*第一列 = 第二列 。

所以最终答案 = x ^ m * 第一列  (矩阵的运用很灵活)

#include <cstdio>
#include <cstring>
#define mod 10000007
typedef long long ll;
int n;
struct mat
{
ll q[16][16];
mat()
{
memset(q,0,sizeof(q));
}
}; mat mat_mul(mat a,mat b)
{
mat re;
for(int i=0; i<=n; i++)
{
for(int j=0; j<=n; j++)
{
for(int k=0; k<=n; k++)
{
re.q[i][j]+=a.q[i][k]*b.q[k][j];
re.q[i][j]%=mod;
}
}
}
return re;
} mat mat_pow(mat m,int num)
{
mat re;
mat tmp=m;
for(int i=0; i<=n; i++)
{
re.q[i][i]=1;
}
while(num)
{
if(num&1)
{
re=mat_mul(re,tmp);
}
tmp=mat_mul(tmp,tmp);
num>>=1;
}
return re;
} int main()
{
int m;
while(scanf("%d%d",&n,&m) != EOF)
{
mat p,orz;
for(int i = 0; i < n; i++)
scanf("%I64d",&p.q[i][0]);
p.q[n][0] = 23;
n++;
p.q[n][0] = 3; for(int i=0; i<n-1; i++)
{
for(int j=0; j<=i; j++)
{
orz.q[i][j]=1;
}
orz.q[i][n-1]=10;
orz.q[i][n]=1;
}
orz.q[n][n] = orz.q[n-1][n] = 1;
orz.q[n-1][n-1] = 10; mat tmp = mat_pow(orz,m);
mat ans= mat_mul(tmp,p); printf("%I64d\n",ans.q[n-2][0]);
}
return 0;
}

  

hdu 5015(矩阵快速幂z )的更多相关文章

  1. 随手练——HDU 5015 矩阵快速幂

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5015 看到这个限时,我就知道这题不简单~~矩阵快速幂,找递推关系 我们假设第一列为: 23 a1 a2 ...

  2. hdu 5015 矩阵快速幂(可用作模板)

    转载:http://blog.csdn.net/wdcjdtc/article/details/39318847 之前各种犯傻 推了好久这个东西.. 后来灵关一闪  就搞定了.. 矩阵的题目,就是构造 ...

  3. HDU 2855 (矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855 题目大意:求$S(n)=\sum_{k=0}^{n}C_{n}^{k}Fibonacci(k)$ ...

  4. HDU 4471 矩阵快速幂 Homework

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...

  5. HDU - 1575——矩阵快速幂问题

    HDU - 1575 题目: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973.  Input数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n( ...

  6. hdu 1757 (矩阵快速幂) 一个简单的问题 一个简单的开始

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题意不难理解,当x小于10的时候,数列f(x)=x,当x大于等于10的时候f(x) = a0 * ...

  7. HDU 3802 矩阵快速幂 化简递推式子 加一点点二次剩余知识

    求$G(a,b,n,p) = (a^{\frac {p-1}{2}}+1)(b^{\frac{p-1}{2}}+1)[(\sqrt{a} + \sqrt{b})^{2F_n} + (\sqrt{a} ...

  8. How many ways?? HDU - 2157 矩阵快速幂

    题目描述 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的 ...

  9. HDU 5950 矩阵快速幂

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

随机推荐

  1. 关于FPGA随笔

    verilog与c

  2. Twisted UDP编程技术

    实战演练1:普通UDP UDP是一种无连接对等通信协议,没有服务器和客户端概念,通信的任何一方均可通过通信原语直接和其他方通信 1.相对于TCP,UDP编程只需定义DatagramProtocol子类 ...

  3. 【iOS】Swift GCD-下

    欢迎来到本GCD教程的第二同时也是最终部分! 在第一部分中,你学到了并发,线程以及GCD的工作原理.通过使用dispatch_barrrier和dispatch_sync,你做到了让PhotoMana ...

  4. 构建微服务开发环境8————Hello 微服务

    [内容指引] 1.用IDEA打开微服务项目; 2.更新Maven依赖: 3.IntelliJ IDEA JDK配置; 4.修改代码: 5.运行微服务: 6.将代码变更提交到Github. 经过前面的努 ...

  5. LeetCode & Q122-Best Time to Buy and Sell Stock II-Easy

    Description: Say you have an array for which the ith element is the price of a given stock on day i. ...

  6. python识别验证码——PIL,pytesser,pytesseract的安装

    1.使用Python识别验证码需要安装Python的图像处理模块(PIL.pytesser.pytesseract) (安装过程需要pip,在我的Python中已经安装pip了,pip的安装就不在赘述 ...

  7. EasyUI datagrid 使用小结

    用了 EasyUI 框架一段时间了,这个前端框架用起来还是挺方便的,也有很多现成的控件,看看官方文档应该还是能比较快用起来的. 在这里记录一下一些常用的控件的方法,遇到过的bug或者当初耗了一点时间来 ...

  8. 算法题丨Two Sum

    描述 Given an array of integers, return indices of the two numbers such that they add up to a specific ...

  9. testNG常用方法

    1.常用注释: 注解                  描述 @BeforeSuite                       在该套件的所有测试都运行在注释的方法之前,仅运行一次. @After ...

  10. NHibernate从入门到精通系列(3)——第一个NHibernate应用程序

    内容摘要 准备工作 开发流程 程序开发 一.准备工作 1.1开发环境 开发工具:VS2008以上,我使用的是VS2010 数据库:任意关系型数据库,我使用的是SQL Server 2005 Expre ...