//看了很多的博客 后来队友指点才懂
//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. readonly与const

    readonly与const 在C#中,readonly 与 const 都是定义常量,但不同之处在于:readonly 是运行时常量,而 const 是编译时常量. ; public void Te ...

  2. UESTC 899 方老师和农场 --双连通分量的构造

    首先将原图中的连通分量缩点,一定可以将原图缩成一棵树的形式,然后统计这棵树的叶子节点个数,答案就是(leaf+1)/2.这里不再证明,可以画个图看一下. (简单说明一下,首先把两个最近公共祖先最远的两 ...

  3. 我发现:在StackOverflow上拯救歪果仁十分有意思!

    菊长:火星特工们!今天是周五了,大家有什么提议? BeJavaGod:报告菊长!我发现,在StackOverflow上拯救歪果仁十分有意思! 噗哈哈,时不时遇到问题会使用到StackOverflow, ...

  4. java9-7 成员内部类的修饰符

    1. 成员内部类的修饰符: private 为了保证数据的安全性 static 为了方便访问数据 注意:静态内部类访问的外部类数据必须用静态修饰. 案例:我有一个人(人有身体,身体内有心脏.) cla ...

  5. man 在线手册

    http://man7.org/linux/man-pages/man3/fwrite.3.html

  6. 分布式监控系统Zabbix-3.0.3-完整安装记录(4)-解决zabbix监控图中出现中文乱码问题

    之前部署了Zabbix-3.0.3监控系统,在安装数据库时已经将zabbix库设置了utf-8字符. 首先确定zabbix开启了中文支持功能:登录到zabbix服务器的数据目录下(前面部署的zabbi ...

  7. Spring2.5与JDK8的集成问题

    Spring2.5不支持JDK8及其以上的版本,因为有一段校验JDK版本的代码,当JDK版本大于1.7之后,会识别成JDK1.4之前的.会报版本太低的错误. /* * Copyright 2002-2 ...

  8. codevs 3012 线段覆盖 4 & 3037 线段覆盖 5

    3037 线段覆盖 5  时间限制: 3 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 数轴上有n条线段,线段的两端都 ...

  9. 16Mybatis_动态sql_if判断

    mybatis的核心就是动态sql. 什么是动态sql:对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 这篇文章讲解sql中的if语句.它可以对查询条件进行判断,如果输入参 ...

  10. 工作流模式与K2实现- (1)

    背景 工作流产品众多,而它们之间又缺乏统一的标准,使得不同的产品之间很难实现协同工作.为了解决这一问题,工作流管理联盟(WFMC)于1993 年成立,并提出了工作流参考模型,制定了五个标准接口. 其中 ...