构造矩阵解决这个问题 【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<= ...
随机推荐
- Mysql5.7全新的root密码规则
http://blog.csdn.net/erlib/article/details/48003681
- zend studio配置调试(Xdebug方式)
1.下载xdebug http://xdebug.org/download.php 我下的是PHP 5.4 VC9 (32 bit) [当前系统php是php5.4.14(win32)版本] 2.配置 ...
- matlab从文件夹名中获得该文件夹下所图像文件名
function [s,nameC]=get_FileNameFromFolderPath(path) % 函数调用:[s,nameC]=get_FileNameFromFolderPath(path ...
- GOOGLE突破图书馆入口IP限制之技巧
很多图书馆都要注册或要本地IP才能浏览或下载图书,有没有另类的快速办法能快速突破图书馆的入口,能随意地下载图书呢? 希望大家在GOOGLE里试试这个:“index of/ ” inurl:lib 你将 ...
- fonts.conf 中文手册
FONTS-CONF(5) FONTS-CONF(5) 名称 fonts.conf -- 字体配置文件 文件概要 /etc/fonts/fonts.conf /etc/fonts/fonts.dtd ...
- mysql考试总结
USE school; -- 班级表 CREATE TABLE class( cid TINYINT PRIMARY KEY AUTO_INCREMENT, caption VARCHAR(20) ) ...
- javaScript几个操作数组增减元素的函数
1. shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined 2. unshift:将参数添加到原数组开头,并返回数组的长度 var a = [1,2,3,4,5]; ...
- Linux CentOS7 系统目录详解
1.目录结构 2.文件类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码.SHELL脚本.二进制的可执行文件 ...
- 神奇的container_of
container_of是linux内核中常用的一个宏,这个宏的功能是,根据某个结构体字段的指针,找到对应的结构体指针. 话不多说,先上源码: /** * container_of - cast a ...
- SVM 总结
SVM有一个核心函数SMO,也就是序列最小最优化算法.SMO基本是最快的二次规划优化算法,其核心就是找到最优参数α,计算超平面后进行分类.SMO方法可以将大优化问题分解为多个小优化问题求解,大大简化求 ...