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. Week04-面向对象设计与继承

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 is a关系 覆盖 Object 超级父类 继承 抽象类 多态 重载 static super private public p ...

  2. Scrum 冲刺 第五日

    目录 要求 项目链接 燃尽图 问题 今日任务 明日计划 成员贡献量 要求 各个成员今日完成的任务(如果完成的任务为开发或测试任务,需给出对应的Github代码签入记录截图:如果完成的任务为调研任务,需 ...

  3. DOM相关知识

    一.查找元素 间接查找 parentNode // 父节点 childNodes // 所有子节点 firstChild // 第一个子节点 lastChild // 最后一个子节点 nextSibl ...

  4. 《高级软件测试》11.16.Jira使用说明的撰写和操作视频的录制

    今日任务完成情况如下: 小王:完成了测试管理工具jira的使用手册中,基本情况介绍.下载安装部分的撰写工作:小高:参考官方手册,结合自己的实际使用体会,对jira的基本组成及其工作流程进行了介绍:小陈 ...

  5. codevs 1291 火车线路

    http://codevs.cn/problem/1291/ 题目描述 Description 某列火车行使在C个城市之间(出发的城市编号为1,结束达到的城市的编号为C),假设该列火车有S个座位,现在 ...

  6. Java如何调取创蓝253短信验证码

    基于创蓝253短信服务平台的Java调用短信接口API package com.bcloud.msg.http; import java.io.ByteArrayOutputStream; impor ...

  7. MSIL实用指南-生成if...else...语句

    if...else...语句是非常重要的选择语句,它的生成一般需要ILGenerator的DefineLabel方法和MarkLabel方法,以及Brtrue_S和Br_S指令. 一.DefineLa ...

  8. istio入门(00)istio的学习资源

    官网:https://istio.io/ 理论知识: http://www.uml.org.cn/wfw/201710131.asp 环境搭建: http://dockone.io/article/2 ...

  9. gradle入门(1-3)使用gradle开发一个发布版本

    需求描述 1.使用Maven central仓库.2.使用Log4j写入日志.3.包含单元测试,保证正确的信息返回,单元测试必须使用JUnit编写.4.创建一个可执行的Jar文件. 我们来看一下怎样实 ...

  10. virtualbox中linux系统与windows实现共享文件夹

    最近有一次,需要在linux获取在我windows系统里的安装包,但是呢不论如何也拿不过去. virtualbox虽然提供了双向拖放,但是实在是太不健壮了,感觉基本就没好使过. 于是我想到了用共享文件 ...