//看了很多的博客 后来队友指点才懂
//sum=f(g(0))+f(g(1))+....
//sum=A^(b-1)*|...|....
//要将b-1换,防止出现b=0时有负一,用A^b代替,取下面的即可
//这样问题成了 sum=A^b(A+A^(2k)+A^(3k)+...+A^(k(n-1)));
//令B=A^k次,就简单了。
/*
主要要求1+A+A^2+A^3+...+A^(n-1)次方
| A A | | A^2 A^2+A | | A^(k-1) A^(k-1)+A^(k-2)+A^(k-3)... |
令B= | | B^2=| | 这样可以得到 B^(n-1)=| |
| 0 1 | | 0 1 | | 0 1 |
*/
#include<stdio.h>
#include<string.h>
#define maxn 30
#define ll __int64
ll n,mod;
struct Mat
{
ll mat[maxn][maxn];
};
Mat cal1(Mat a,Mat b,int nn)//矩阵乘法
{
Mat c;
memset(c.mat,,sizeof(c.mat));
int i,j,k;
for(i=;i<nn;i++)
for(j=;j<nn;j++)
for(k=;k<nn;k++)
{
c.mat[i][j]+=((a.mat[i][k]*b.mat[k][j])%mod);
c.mat[i][j]%=mod;
}
return c;
}
Mat cal2(Mat a,ll k,int nn)//矩阵幂
{
int i,j;
Mat c;
for(i=;i<nn;i++)
for(j=;j<nn;j++)
if(i==j)c.mat[i][j]=;
else c.mat[i][j]=;
while(k)
{
if(k&)
c=cal1(c,a,nn);
k=k>>;
a=cal1(a,a,nn);
}
return c;
}
Mat A,B,S;
void initA()
{
A.mat[][]=;
A.mat[][]=;
A.mat[][]=;
A.mat[][]=;
}
void initB()
{
int i,j;
for(i=;i<;i++)
for(j=;j<;j++)
{
B.mat[i][j]=A.mat[i][j];
B.mat[i][j+]=A.mat[i][j];
}
for(i=;i<;i++)
for(j=;j<;j++)
B.mat[i][j]=;
for(i=;i<;i++)
for(j=;j<;j++)
if(i==j)
B.mat[i][j]=;
else B.mat[i][j]=;
}
Mat getmat()
{
int i,j;
Mat c;
for(i=;i<;i++)
for(j=;j<;j++)
c.mat[i][j-]=B.mat[i][j];
for(i=;i<;i++)
for(j=;j<;j++)
if(i==j)
c.mat[i][j]+=;
return c;
}
int main()
{
ll i,j,k,b;
while(scanf("%I64d %I64d %I64d %I64d",&k,&b,&n,&mod)!=EOF)
{
initA();
S=cal2(A,b,);
A=cal2(A,k,);
initB();
B=cal2(B,n-,);
Mat temp=getmat();
S=cal1(S,temp,);
/*for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
printf("%I64d ",S.mat[i][j]);
printf("\n");
}*/
printf("%d\n",S.mat[][]); }
}

hdu1588 矩阵快速幂的更多相关文章

  1. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  2. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  3. 51nod 1113 矩阵快速幂

    题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...

  4. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  5. HDU5950(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2 ...

  6. 51nod 1126 矩阵快速幂 水

    有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...

  7. hdu2604(递推,矩阵快速幂)

    题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...

  8. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  9. hdu4965 Fast Matrix Calculation (矩阵快速幂 结合律

    http://acm.hdu.edu.cn/showproblem.php?pid=4965 2014 Multi-University Training Contest 9 1006 Fast Ma ...

随机推荐

  1. 怎样用好ZBrush中的PaintStop插件

    PaintStop是ZBrush®3.1的手绘插件,可以比较真实的模拟手绘风格,尤其是用水彩笔刷画水墨风格画.PaintStop插件可供用户免费使用. PaintStop是一款功能强大的插件,已经被添 ...

  2. 边工作边刷题:70天一遍leetcode: day 73

    Read N Characters Given Read4 I/II 要点:这题的要点就是搞清楚几个变量的内在逻辑:只有buffer是整4 bytes的.而client要读的bytes(需求)和实际上 ...

  3. 对Spring的IoC和DI最生动的解释

    首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系 ...

  4. 集合框架学习笔记<二>

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...

  5. FreeMarker 一二事 - 静态模板结合spring展示

    freemarker可以脱离web使用 前一篇文章使用了普通的方法 这回说说结合spring pom额外引入这个jar包 <dependency> <groupId>org.s ...

  6. SVN版本回退

    [SVN版本回退] 在Windows里,先打开Log面板,根据想要回退的内容,然后选择revert to this revision或者revert changes from this revisio ...

  7. xshell5.0实现中键复制

    1. 右建点击黑色屏幕 2. 在打开选项 3. 勾选 ""

  8. 转: EclipseIDE开发 for C++

    Eclipse 开发C++ 程序 http://tangmingjie2009.iteye.com/blog/2088363 Eclipse 开发C++ 程序 (二) 静态库 http://tangm ...

  9. Volley(四)—— ImageLoader & NetworkImageView

    Volley(四)—— ImageLoader & NetworkImageView ImageLoader是一个加载网络图片的封装类,其内部还是由ImageRequest来实现的.但因为源码 ...

  10. S2--《深入.NET平台和C#编程》

    第一章    深入.NET框架 1.1  Microsoft  .NET框架概述 .NET框架的优势 * 提供了一个面向对象的编程环境,完全支持面向对象编程,.NET 框架提高了软件的可复用性,可扩展 ...