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. python functools.lru_cache做备忘功能

    import time import functools def clock(func): @functools.wraps(func)#还原被装饰函数的__name__和__doc__属性 def ...

  2. Java中的Integer

    包装类---Integer Integer 类在对象中包装了一个基本类型int的值.Integer类型的对象包含一个 int 类型的字段.此外,该类提供了多个方法,能在 int 类型和 String ...

  3. Tornado 用户身份验证框架

    1.安全cookie机制 import tornado.web session_id = 1 class MainHandler(tornado.web.RequestHandler): def ge ...

  4. selenium 爬虫

    from selenium import webdriver import time driver = webdriver.PhantomJS(executable_path="D:/pha ...

  5. 201421123042 《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...

  6. 清华集训2015 V

    #164. [清华集训2015]V http://uoj.ac/problem/164 统计 描述 提交 自定义测试 Picks博士观察完金星凌日后,设计了一个复杂的电阻器.为了简化题目,题目中的常数 ...

  7. rcnn fast-rcnn faster-rcnn资料

    ---恢复内容开始--- 框架:https://github.com/rbgirshick 论文:链接: https://pan.baidu.com/s/1jIoChxG 密码: ubgm faste ...

  8. linux下面根据不同的日期创建不同文件,一般用户数据库的备份的shell编程

    [root@www scripts]# vi sh03.sh #!/bin/bash # Program: #  Program creates three files, which named by ...

  9. Spring Security 入门(1-3-3)Spring Security - logout 退出登录

    要实现退出登录的功能我们需要在 http 元素下定义 logout 元素,这样 Spring Security 将自动为我们添加用于处理退出登录的过滤器 LogoutFilter 到 FilterCh ...

  10. 【52ABP实战教程】0.3-- 从github推送代码回vsts实现双向同步

    需求 在之前的文章中"[DevOps]如何用VSTS持续集成到Github仓库" 我们有讲述如何将vsts中的代码编译推送到github中,这一篇我们来完善,如果有人给你开源项目推 ...