构造矩阵解决这个问题 【nyoj299 Matrix Power Series】
矩阵的又一个新使用方法,构造矩阵进行高速幂。
比方拿 nyoj299 Matrix Power Series 来说
给出这样一个递推式: S = A + A2 + A3 +
… + Ak.
让你求s。A是一个矩阵,而k很大。
怎么办呢?
推理发现:Fn = A + A*F(n-1)
然后我们能够构造矩阵:
(Fn 。1 ) = (Fn-1 ,1) * (A。0。
A,1) = (F1 , 1) * (A,0。
A,1)^K-1
那么我们就能够用一个矩阵高速幂了。
以下是模板题目的代码:
#include <cstdio>
#include <string>
#include <cmath>
#include <iostream>
using namespace std;
int M;
const long long N = 32*2;
long long t,b,c,f1,f2;
struct tree //基础矩阵
{
long long line,cal;
long long a[N+1][N+1];
};
struct Node //构造矩阵
{
long long line,cal;
long long a[N+1][N+1];
Node(tree x)
{
line=x.line*2;
cal=2*x.cal;
for(int i=0;i<x.line*2;i++)
{
for(int j=0;j<x.cal;j++)
{
a[i][j]=x.a[i%x.line][j];
}
}
for(int i=0;i<x.line;i++)
for(int j=x.cal;j<x.cal*2;j++)
a[i][j]=0;
for(int i=x.line;i<2*x.line;i++){
for(int j=x.cal;j<2*x.cal;j++){
if(i==j)
a[i][j]=1;
else
a[i][j]=0;
}
}
}
}; Node isit(Node x,long long c) //矩阵初始化
{
for(long long i=0;i<N;i++)
for(long long j=0;j<N;j++)
x.a[i][j]=c;
return x;
} Node Matlab(Node x,Node s) //矩阵乘法
{
Node ans(x);
ans.line = x.line,ans.cal = s.cal;
ans=isit(ans,0);
for(long long i=0;i<x.line;i++)
{
for(long long j=0;j<x.cal;j++)
{
for(long long k=0;k<s.cal;k++)
{
ans.a[i][j] += x.a[i][k]*s.a[k][j];
ans.a[i][j]=(ans.a[i][j])%M;
}
}
}
return ans;
}
Node Fast_Matrax(tree x,long long n) //矩阵高速幂
{
Node ans(x),tmp(x);
for(int i=0;i<ans.line/2;i++) //chushihua
{
for(int j=0;j<ans.cal;j++)
{
ans.a[i][j]=ans.a[i+ans.line/2][j];
//printf("%d ",ans.a[i][j]);
}
}
ans.line/=2;
while(n>0)
{
if(n%2)
{
ans=Matlab(ans,tmp);
}
tmp=Matlab(tmp,tmp);
n/=2;
}
return ans;
}
int main()
{
int n,k,m;
while(~scanf("%d%d%d",&n,&k,&m))
{
M=m;
tree p;
p.line=n,p.cal=n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&p.a[i][j]);
Node ans=Fast_Matrax(p,k-1);
for(int i=0;i<ans.line;i++)
{
for(int j=0;j<ans.cal/2;j++)
printf("%d ",ans.a[i][j]);
puts("");
}
}
return 0;
}
构造矩阵解决这个问题 【nyoj299 Matrix Power Series】的更多相关文章
- POJ 3233 Matrix Power Series(矩阵快速幂)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 19338 Accepted: 8161 ...
- POJ 3233 Matrix Power Series 【经典矩阵快速幂+二分】
任意门:http://poj.org/problem?id=3233 Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K To ...
- Poj 3233 Matrix Power Series(矩阵乘法)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Description Given a n × n matrix A and ...
- [矩阵乘法] PKU3233 Matrix Power Series
[ 矩 阵 乘 法 ] M a t r i x P o w e r S e r i e s [矩阵乘法]Matrix Power Series [矩阵乘法]MatrixPowerSeries Desc ...
- C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速
Matrix Power Series r时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定矩阵A,求矩阵S=A^1+A^2+--+A^k,输出矩阵,S矩阵中每个元都要模m. 数据范围: ...
- POJ 3233 Matrix Power Series (矩阵乘法)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 11954 Accepted: ...
- [ACM] POJ 3233 Matrix Power Series (求矩阵A+A^2+A^3...+A^k,二分求和或者矩阵转化)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 15417 Accepted: ...
- poj 3233 Matrix Power Series(矩阵二分,高速幂)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 15739 Accepted: ...
- [POJ3233]Matrix Power Series 分治+矩阵
本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [POJ3233]Matrix Power Series 分治+矩阵 题目大意 A为n×n(n<= ...
随机推荐
- 【mybatis】mysql级联更新两个表或多张表的数据
例如 info表和relation表有关联,现在要在一个sql语句中同时级联更新两张表的数据 update security_code_info info LEFT JOIN security_cod ...
- Java:终结器防卫者,顺便看一下 C# 如何做的。
背景 多数情况我们不需要重写 finalize 方法,只有当我们需要持有未托管资源的时候才需要,而此时重写 finalize 方法,只是作为一个“安全网”,不能作为常规的资源释放模式,必须提供显式的释 ...
- 如何利用Flink实现超大规模用户行为分析
如何利用Flink实现超大规模用户行为分析 各位晚上好,首先感谢大家参与我的这次主题分享,同时也感谢 InfoQ AI 前线组织这次瀚思科技主题月! 瀚思科技成立于 2014 年,按行业划分我们是 ...
- Django的restful api自动生成工具django-rest-swagger介绍
源码位置:https://github.com/marcgibbons/django-rest-swagger 文档位置:https://marcgibbons.com/django-rest-swa ...
- 在Spark程序中使用压缩
当大片连续区域进行数据存储并且存储区域中数据重复性高的状况下,数据适合进行压缩.数组或者对象序列化后的数据块可以考虑压缩.所以序列化后的数据可以压缩,使数据紧缩,减少空间开销. 1. Spark对压缩 ...
- 【SSH 基础】SSH框架--struts深入具体解释(一)
学习了struts,可是对于它的由来,以及为什么使用action和struts.xml的方式而不採用曾经的servlet方式.有些疑问,究竟之前的方式有什么弊端,struts又给我们带来了什么便利? ...
- html中块注释<!--[if IE]>….<![endif]--> (<!--[if !IE]>||<![endif]
1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->2. <!--[if IE]> 所有的IE可识别 & ...
- 使用HTML5的两个api,前端js完成图片压缩
主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交. 照片是 ...
- Scheme 4 Javaer-3.高阶函数
1.3 Formulating Abstractions with Higher-Order Procedures 教材有时候依照学生的基础.从0讲起:有时候给出一个大图,然后具体地逐一介绍. 本文 ...
- eclipse 发布签名APK图文讲解
eclipse 发布 签名android 程序 1 在项目上右键 export 2 export android application 3 第一次发布 要创建一个新的keystore 4 填写key ...