题目大意:给定A,k,m(取模),求解S = A + A2 + A3 + … + Ak.

思路:此题为求解幂的和,一开始直接一个个乘,TLE。时间消耗在累加上。此处巧妙构造新矩阵

p=    A 0

   1 1   ,1 代表单位矩阵。那么p*p=A 0

                    A+1,1

p*p*p=A*A 0

    A*A+A+1 1

那么最后求得的结果就是左下角的矩阵减去一个单位矩阵。最后需要注意的是若在简单为矩阵的时候结果为负数,那么为m-1;

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std; typedef vector<int> vec;
typedef vector<vec> mat; mat a,b;
int n,k,m;
mat mul(mat x,mat y)
{
mat c(*n,vec(*n));
int sum;
int i,j,w;
for(i=;i<*n;i++)
for(j=;j<*n;j++)
{
sum=;
for(w=;w<*n;w++)
sum=(sum+x[i][w]*y[w][j])%m;
c[i][j]=sum;
}
return c;
} mat m_pow(mat x,int p)
{
mat res(*n,vec(*n));
int i;
for(i=;i<*n;i++)
res[i][i]=;
while(p>)
{
if(p&)
res=mul(res,x);
x=mul(x,x);
p>>=;
}
return res;
} int main()
{
int i,j,x;
freopen("in.txt","r",stdin);
cin>>n>>k>>m;
mat a(*n,vec(*n)); for(i=;i<n;i++)
for(j=;j<n;j++)
cin>>a[i][j];
for(i=;i<n;i++)
for(j=n;j<*n;j++)
a[i][j]=;
for(i=n;i<*n;i++)
a[i][i-n]=a[i][i]=; a=m_pow(a,k+); for(i=n;i<*n;i++)
{
for(j=;j<n;j++)
{
if((i-j)==n)
a[i][j]--;
if(a[i][j]<)
a[i][j]+=m;
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return ;
}

Matrix Power Series(POJ 3233 构造新矩阵求解+ 快速矩阵幂)的更多相关文章

  1. Matrix Power Series(POJ 3233)

    原题如下: Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 28044   Acce ...

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

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

  3. POJ 3233 Matrix Power Series 【经典矩阵快速幂+二分】

    任意门:http://poj.org/problem?id=3233 Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K To ...

  4. 矩阵十点【两】 poj 1575 Tr A poj 3233 Matrix Power Series

    poj 1575  Tr A 主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575 题目大意:A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的 ...

  5. Poj 3233 Matrix Power Series(矩阵乘法)

    Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Description Given a n × n matrix A and ...

  6. POJ 3233 Matrix Power Series (矩阵乘法)

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 11954   Accepted:  ...

  7. POJ 3233 Matrix Power Series(矩阵快速幂)

    Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 19338 Accepted: 8161 ...

  8. [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:  ...

  9. poj 3233 Matrix Power Series(矩阵二分,高速幂)

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 15739   Accepted:  ...

随机推荐

  1. Spring学习笔记--依赖注入

    依赖注入和控制反转:http://baitai.iteye.com/blog/792980出自李刚<轻量级 Java EE 企业应用实战> Java应用是一种典型的依赖型应用,它就是由一些 ...

  2. DatePickerDialog 控制只选择年月或年或月

    etXyLevelDate.setOnTouchListener(selectDateTouchListener()); /** * @desc 选择日期操作 * @param @return * @ ...

  3. Chaos Software Google Sync v10.1.1.0 和Syncovery Pro

    Chaos Software Google Sync v10.1.1.0 Release: Chaos.Software.Google.Sync.v10.1.1.0.Incl.Keygen-BEANS ...

  4. linux 版本家族

    1. 简单的说,在桌面系统上,可分为Debian和RedHat两大分支,然后Debian这一分支到现在比较火的是Ubuntu, RedHat比较火的是Fedora.贴一下它们的版本历史:  fedor ...

  5. 【转】Win7、Ubuntu双系统正确卸载Ubuntu系统--不错

    原文网址:http://my.oschina.net/u/1377657/blog/281872 如果ubuntu不是以wubi方式安装的,而是U盘或者光盘装的双系统,那么卸载ubuntu时要慎重,不 ...

  6. NOI2015

    D1T1 并查集. #include<cstdio> #include<cstdlib> #include<iostream> #include<fstrea ...

  7. Kuhn-Munkres算法。带权二分图匹配模板 (bin神小改版本)

    /****************************************************** 二分图最佳匹配 (kuhn munkras 算法 O(m*m*n)). 邻接矩阵形式 . ...

  8. 写在学习linux内核协议栈之前

    一直很喜欢内核,但是新手,非常的痛苦啊.现在看一本linux内核协议栈源码解析一书,将自己学习的经历以及 理解记录下来,以备将来回头查漏补缺,同时校正自己的理解错误,自勉

  9. 修改xcode代码风格设置

    1.找到文件:/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/S ...

  10. Codeforce 218 div2

    D 一开始想错了,试图用"前缀和-容量"来求从上层流下来了多少水",但这是错的,因为溢出可能发生在中间. 然后发现对于每层,溢出事件只会发生一次,所以可以用类似并查集的办 ...