UVA - 11149 (矩阵快速幂+倍增法)
第一道矩阵快速幂的题;模板题;
#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 (矩阵快速幂+倍增法)的更多相关文章
- BZOJ.4180.字符串计数(后缀自动机 二分 矩阵快速幂/倍增Floyd)
题目链接 先考虑 假设S确定,使构造S操作次数最小的方案应是:对T建SAM,S在SAM上匹配,如果有S的转移就转移,否则操作数++,回到根节点继续匹配S.即每次操作一定是一次极大匹配. 简单证明:假设 ...
- 2019 牛客暑期多校 B generator 1 (矩阵快速幂+倍增)
题目:https://ac.nowcoder.com/acm/contest/885/B 题意:给你x0,x1,让你求出xn,递推式时xn=a*xn-1+b*xn-2 思路:这个n特别大,我自己没有摸 ...
- UVa 11149 矩阵的幂(矩阵倍增法模板题)
https://vjudge.net/problem/UVA-11149 题意: 输入一个n×n矩阵A,计算A+A^2+A^3+...A^k的值. 思路: 矩阵倍增法. 处理方法如下,一直化简下去直到 ...
- UVa 10870 & 矩阵快速幂
题意: 求一个递推式(不好怎么概括..)的函数的值. 即 f(n)=a1f(n-1)+a2f(n-2)+...+adf(n-d); SOL: 根据矩阵乘法的定义我们可以很容易地构造出矩阵,每次乘法即可 ...
- UVa 10870 (矩阵快速幂) Recurrences
给出一个d阶线性递推关系,求f(n) mod m的值. , 求出An-dv0,该向量的最后一个元素就是所求. #include <iostream> #include <cstdio ...
- 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) ...
- 2018.11.08 NOIP模拟 景点(倍增+矩阵快速幂优化dp)
传送门 首先按照题意构造出转移矩阵. 然后可以矩阵快速幂求出答案. 但是直接做是O(n3qlogm)O(n^3qlogm)O(n3qlogm)的会TTT掉. 观察要求的东西发现我们只关系一行的答案. ...
- uva 10518 - How Many Calls?(矩阵快速幂)
题目链接:uva 10518 - How Many Calls? 公式f(n) = 2 * F(n) - 1, F(n)用矩阵快速幂求. #include <stdio.h> #inclu ...
- LOJ2325. 「清华集训 2017」小 Y 和恐怖的奴隶主【矩阵快速幂优化DP】【倍增优化】
LINK 思路 首先是考虑怎么设计dp的状态 发现奴隶主的顺序没有影响,只有生命和个数有影响,所以就可以把每个生命值的奴隶主有多少压缩成状态就可以了 然后发现无论是什么时候一个状态到另一个状态的转移都 ...
随机推荐
- JS获取今天和上个月的今天
function getLastMonth(){ var now=new Date(); var year = now.getFullYear();//getYear()+1900=getFullYe ...
- Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)
1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...
- redis实现消息队列&发布/订阅模式使用
在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录. Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ...
- spring整合ehcache2.5.2缓存异常-- net.sf.ehcache.CacheException
报错如下: The source of the existing CacheManager is: DefaultConfigurationSource [ ehcache.xml or ehcach ...
- Linux文件目录类指令
⒈pwd 显示当前工作目录的绝对路径 ⒉ls [Options] [目录或文件] 常用选项: -a:显示当前目录下所有的文件和目录,包括隐藏的. -l:以列表的方式显示信息. ⒊cd [目录的绝对路径 ...
- SpringBoot定制错误的Json数据
(1)自定义异常处理&返回定制Json数据 @ControllerAdvice public class MyExceptionHandler { @ResponseBody @Excepti ...
- mybatis二级缓存应用及与ehcache整合
mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存. 1.开启mybatis的二级缓存 在核心配 ...
- sklearn 岭回归
可以理解的原理描述: [机器学习]岭回归(L2正则) 最小二乘法与岭回归的介绍与对比 多重共线性的解决方法之——岭回归与LASSO
- Python-HTML CSS 练习
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- OneNET麒麟座应用开发之九:与SD卡通讯并保存数据
由于需要记录的数据量比较大,而且有些时候,有的用户不方便实时上传数据,所以要求使用SD卡存储数据然后人工收取上传.为此我们选择了一种通用的SD卡读写器. 1.读卡器简介 该读卡器整合 SD 卡规范和 ...