题意:对于矩阵A,求A^1 + ...... + A^k

按照矩阵十大经典题的思路大致做了下。

在k为奇数时:  A^( k / 2+1)+ 1) * (A^1 + ....... A^(k/2)) + A^(k/2+1)

k为偶数时:(A^(k/2) + 1 )* (A^1 + ................A^(k/2))

但是超时了,应该是没二分的问题。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<functional>
using namespace std;
typedef long long ll; const int maxn=5e5;
map<int,int>has;
struct Matrix
{
int xmap[30][30];
};
int siz;
Matrix mat;
int n,mod;
Matrix Mul(const Matrix &a,const Matrix &b)
{
Matrix c;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
c.xmap[i][j]=0;
for(int k=0; k<n; k++)
{
c.xmap[i][j]+=a.xmap[i][k]*b.xmap[k][j];
c.xmap[i][j]%=mod;
}
}
}
return c;
} Matrix Pow(int n)
{
if(n == 1)
return mat;
else if(n & 1)
{
return Mul(mat,Pow(n-1));
}
else
{
Matrix tmp = Pow(n>>1);
return Mul(tmp,tmp);
}
} Matrix Add(const Matrix &a,const Matrix &b)
{
Matrix c;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
c.xmap[i][j] = a.xmap[i][j] + b.xmap[i][j];
c.xmap[i][j]%=mod;
}
}
return c;
} Matrix solve(int k)
{
if(k == 1)
return mat;
Matrix tt;
Matrix tmp = solve(k/2);
if (k&1)
{
tt=Pow(k/2+1);
tmp=Add(tmp,Mul(tmp,tt));
tmp=Add(tt,tmp);
}
else
{
tt=Pow(k/2);
tmp=Add(tmp,Mul(tmp,tt));
}
return tmp;
} int main()
{
int k;
while(scanf("%d%d%d",&n,&k,&mod)!= EOF)
{
for(int i = 0; i < n; i++)
for(int j = 0 ; j < n; j++)
{
scanf("%d",&mat.xmap[i][j]);
mat.xmap[i][j] %= mod;
} Matrix ans = solve(k);
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
printf("%d ",ans.xmap[i][j]);
printf("\n");
}
}
return 0;
}

  

POJ 3233 (矩阵)的更多相关文章

  1. 矩阵儿快速幂 - POJ 3233 矩阵力量系列

    不要管上面的标题的bug 那是幂的意思,不是力量... POJ 3233 Matrix Power Series 描述 Given a n × n matrix A and a positive in ...

  2. Matrix Power Series POJ - 3233 矩阵幂次之和。

    矩阵幂次之和. 自己想着想着就想到了一个解法,但是还没提交,因为POJ崩了,做了一个FIB的前n项和,也是用了这个方法,AC了,相信是可以得. 提交了,是AC的 http://poj.org/prob ...

  3. poj 3233(矩阵高速幂)

    题目链接:http://poj.org/problem?id=3233. 题意:给出一个公式求这个式子模m的解: 分析:本题就是给的矩阵,所以非常显然是矩阵高速幂,但有一点.本题k的值非常大.所以要用 ...

  4. poj 3233 矩阵快速幂

    地址 http://poj.org/problem?id=3233 大意是n维数组 最多k次方  结果模m的相加和是多少 Given a n × n matrix A and a positive i ...

  5. poj 3233 矩阵快速幂+YY

    题意:给你矩阵A,求S=A+A^1+A^2+...+A^n sol:直接把每一项解出来显然是不行的,也没必要. 我们可以YY一个矩阵: 其中1表示单位矩阵 然后容易得到: 可以看出这个分块矩阵的左下角 ...

  6. POJ 3233 矩阵乘法

    题意:求解A+A^2+...+A^k 题解: 1)利用通和公式,原式=(A^k+1 - A)(A - O)^-1 时间复杂度O(n^3lgk) 2)递归求解,A+A^2+...+A^k=(A+A^2+ ...

  7. POJ - 3233 矩阵套矩阵

    题意:给你矩阵\(A\),求\(S=\sum_{i=1}^{k}A^i\) 构造矩阵 \[ \begin{bmatrix} A & E \\ 0 & E\\ \end{bmatrix} ...

  8. Poj 3233 矩阵快速幂,暑假训练专题中的某一道题目,矩阵快速幂的模板

    题目链接  请猛戳~ Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 ...

  9. POJ 3233 矩阵快速幂&二分

    题意: 给你一个n*n的矩阵 让你求S: 思路: 只知道矩阵快速幂 然后nlogn递推是会TLE的. 所以呢 要把那个n换成log 那这个怎么搞呢 二分! 当k为偶数时: 当k为奇数时: 就按照这么搞 ...

随机推荐

  1. WingIDE5.*注册破解方法

    WingIDE是Python程序语言设计的集成开发环境,具有语法标签高亮显示,命令自动完成和函数跳转列表等非常强大的功能.本文主要介绍WingIDE 5安装及注册破解方法. 1. WingIDE 5下 ...

  2. python使用tesseract-ocr完成验证码识别(模型训练和使用部分)

    一.Tesseract训练 大体流程为:安装jTessBoxEditor -> 获取样本文件 -> Merge样本文件 –> 生成BOX文件 -> 定义字符配置文件 -> ...

  3. machine learning 之 导论 一元线性回归

    整理自Andrew Ng 的 machine learnig 课程 week1. 目录: 什么是机器学习 监督学习 非监督学习 一元线性回归 模型表示 损失函数 梯度下降算法 1.什么是机器学习 Ar ...

  4. java程序员最不愿意看到的十件事

     0.遍历结果集并构造对象如果你是个时髦的开发者而不是专业人员,显然你从某篇博客中读过有开发者遇到Hibernate的“性能问题”,因而认为ORM都不好,觉得手动编码“明显更好”.喜欢的话你当然可以用 ...

  5. 新概念英语(1-135)The latest report

    Lesson 135 The latest report 最新消息 Listen to the tape then answer this question. Is Karen Marsh going ...

  6. 其实你并不懂如何定义一个 PHP 函数

    <?php function divide($dividend, $divisor){ return $dividend / $divisor; } echo divide(12, 4); ec ...

  7. 双击表,powerdesigner pdm 没有 comment列(no comment)

  8. 通过java把excel内容上传到mysql

    mysql 表列名 num1,num2,num3,num4,num5,num6  表名Excle 上传的方法 package com.web.connection; import java.io.Fi ...

  9. UIView圆角设置

    对于UIview的圆角设置最简单的就是layer的两个属性分别是cornerRadius和masksToBounds,但是对于设置其中某一个角为圆角的时候需要使用贝塞尔曲线 UIView *aView ...

  10. mysql中出现Unknown column 'qwe' in 'field list'的错误

    下面是我建表的代码 输入数据的代码 可以看到出现了类似Unknown column 'qwe' in 'field list'的错误 当时看了好久改了又改都没有找到错误,直道我在一次打C语言代码的过程 ...