第一道矩阵快速幂的题;模板题;

#include<stack>
#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; #define INF 0x3f3f3f3f
typedef long long ll;
const ll maxn = ;
int n;
int m; ll euler[maxn];
ll fun_[maxn]; struct node
{
int a[][];
node()
{
memset(a,,sizeof(a));
}
node operator *(const node& m2) const
{
node m1;
for (int i=; i<n; i++)
{
for (int j=; j<n; j++)
{
m1.a[i][j]=;
for (int k=; k<n; k++)
{
m1.a[i][j]+=a[i][k]*m2.a[k][j];
m1.a[i][j]%=;
}
}
}
return m1;
}
node operator +(const node& m2) const
{
node m1;
for (int i=; i<n; i++)
{
for (int j=; j<n; j++)
{
m1.a[i][j]=a[i][j]+m2.a[i][j];
m1.a[i][j]%=;
}
}
return m1;
} } A,E; void init()
{
memset(E.a,,sizeof(E.a));
for (int i=;i<n;i++)
{
// for (int j=0;j<n;j++)
// {
// if (i==j)
E.a[i][i]=;
// }
}
} node quick_mod_(node c,int k)
{
node e=E;
while (k)
{
if(k&) e=e*c;
c = c*c;
k>>=;
}
return e;
} node find_(int k)
{
if (k==)
{
return A;
}
if(k%==)
{
k/=;
node nod=quick_mod_(A,k)+E;
nod=nod*find_(k);
return nod;
}
else
{
node t=quick_mod_(A,k);
k--;
k/=;
node nod=quick_mod_(A,k)+E;
nod=nod*find_(k);
//cout<<nod.a[0][3]<<endl;
nod = nod +t;
return nod;
}
} void print_(node p)
{
for (int i=;i<n;i++)
{
for (int j=;j<n;j++)
{
if (!j)
cout<<p.a[i][j];
else
cout<<" "<<p.a[i][j];
}cout<<endl;
}
} int main()
{
int kase=; while (cin>>n>>m&&(m+n))
{
init();
if (kase) cout<<endl;
for (int i=; i<n; i++)
{
for (int j=; j<n; j++)
{
cin>>A.a[i][j];
A.a[i][j]%=;
}
}
node q=find_(m);
// cout<<endl;
// cout<<q.a[0][0]<<" "<<q.a[0][1]<<" "<<q.a[0][2]<<endl<<endl;
print_(q);
kase++;
}
return ;
} /*
3 2
0 2 0
0 0 2
0 0 0 */

倍增法的 解释:

UVA - 11149 (矩阵快速幂+倍增法)的更多相关文章

  1. BZOJ.4180.字符串计数(后缀自动机 二分 矩阵快速幂/倍增Floyd)

    题目链接 先考虑 假设S确定,使构造S操作次数最小的方案应是:对T建SAM,S在SAM上匹配,如果有S的转移就转移,否则操作数++,回到根节点继续匹配S.即每次操作一定是一次极大匹配. 简单证明:假设 ...

  2. 2019 牛客暑期多校 B generator 1 (矩阵快速幂+倍增)

    题目:https://ac.nowcoder.com/acm/contest/885/B 题意:给你x0,x1,让你求出xn,递推式时xn=a*xn-1+b*xn-2 思路:这个n特别大,我自己没有摸 ...

  3. UVa 11149 矩阵的幂(矩阵倍增法模板题)

    https://vjudge.net/problem/UVA-11149 题意: 输入一个n×n矩阵A,计算A+A^2+A^3+...A^k的值. 思路: 矩阵倍增法. 处理方法如下,一直化简下去直到 ...

  4. UVa 10870 & 矩阵快速幂

    题意: 求一个递推式(不好怎么概括..)的函数的值. 即 f(n)=a1f(n-1)+a2f(n-2)+...+adf(n-d); SOL: 根据矩阵乘法的定义我们可以很容易地构造出矩阵,每次乘法即可 ...

  5. UVa 10870 (矩阵快速幂) Recurrences

    给出一个d阶线性递推关系,求f(n) mod m的值. , 求出An-dv0,该向量的最后一个元素就是所求. #include <iostream> #include <cstdio ...

  6. POJ-3070Fibonacci(矩阵快速幂求Fibonacci数列) uva 10689 Yet another Number Sequence【矩阵快速幂】

    典型的两道矩阵快速幂求斐波那契数列 POJ 那是 默认a=0,b=1 UVA 一般情况是 斐波那契f(n)=(n-1)次幂情况下的(ans.m[0][0] * b + ans.m[0][1] * a) ...

  7. 2018.11.08 NOIP模拟 景点(倍增+矩阵快速幂优化dp)

    传送门 首先按照题意构造出转移矩阵. 然后可以矩阵快速幂求出答案. 但是直接做是O(n3qlogm)O(n^3qlogm)O(n3qlogm)的会TTT掉. 观察要求的东西发现我们只关系一行的答案. ...

  8. uva 10518 - How Many Calls?(矩阵快速幂)

    题目链接:uva 10518 - How Many Calls? 公式f(n) = 2 * F(n) - 1, F(n)用矩阵快速幂求. #include <stdio.h> #inclu ...

  9. LOJ2325. 「清华集训 2017」小 Y 和恐怖的奴隶主【矩阵快速幂优化DP】【倍增优化】

    LINK 思路 首先是考虑怎么设计dp的状态 发现奴隶主的顺序没有影响,只有生命和个数有影响,所以就可以把每个生命值的奴隶主有多少压缩成状态就可以了 然后发现无论是什么时候一个状态到另一个状态的转移都 ...

随机推荐

  1. Nginx实战之让用户通过用户名密码认证访问web站点

    1.Nginx实战之让用户通过用户名密码认证访问web站点 [root@master ~]# vim /usr/local/nginx/conf/extra/www.conf server { lis ...

  2. python 设计及调试的一些小技巧

    在“笨办法学习python”中介绍了一些设计函数以及调试技巧: 参考网址:http://www.jb51.net/shouce/Pythonbbf/latest/ex36.html If 语句的规则¶ ...

  3. android handlerThread

    一.handlerThread产生的背景

  4. Linux内存管理5---物理内存管理

    1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本 ...

  5. ubuntu 的 apt-get update 出现404错误时,或者添加ppa失败时,ubuntu 版本也 end of life 了的解决方案

    xmodulo.com/how-to-fix-apt-get-update-error-on-ubuntu.html 如果是依赖没找到,可以用 sudo apt-get install -f 先补齐依 ...

  6. Linux性能分析的前60000毫秒【转】

    Linux性能分析的前60000毫秒 为了解决性能问题,你登入了一台Linux服务器,在最开始的一分钟内需要查看什么? 在Netflix我们有一个庞大的EC2 Linux集群,还有非常多的性能分析工具 ...

  7. MySQL在线更改binlog格式

    今天变更jboss报错如下: SQLWarning ignored: SQL state ', message [Unsafe statement written to the binary log ...

  8. tomcat8配置SSL

    参考网址:http://www.micmiu.com/enterprise-app/sso/sso-cas-sample/#viewSource 1.生成证书 keytool -genkey -ali ...

  9. Nodejs实现WebSocket通信demo

    一.创建websocket.js文件 步骤: 1.创建websocket.js文件,复制如下代码: 2.安装nodejs-websocket依赖: 3.该文件夹下命令行执行 node websocke ...

  10. PYTHON-UDP

    1.TCP 和 UDP 发送数据时的流程 ***** 解释 为何TCP是可靠的 是因为发送数据后必须收到确认包 2. UDP的模板代码 ***** 1.UDP协议: (数据报协议) 特点: 无连接 优 ...