Description

Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.

Input

The input contains exactly one test case. The first line of input contains three positive integers n (n ≤ 30), k (k ≤ 109) and m (m < 104). Then follow n lines each containing n nonnegative integers below 32,768, giving A’s elements in row-major order.

Output

Output the elements of S modulo m in the same way as A is given.

Sample Input

2 2 4
0 1
1 1

Sample Output

1 2
2 3

Source

POJ Monthly--2007.06.03, Huang, Jinsong
 
 
正解:矩乘快速幂+二分
解题报告;
  今天考试T1。
  考场上面推了一个上午的式子,好不容易发现一个,而且是一个log的,结果太复杂了,没调出来。最后没办法了,临时yy了一个两个log的方法,好歹也过了。
  考虑只有两种可能,题目相当于是要求一个前缀和,那么矩乘满足分配律,所以我们可以直接利用前面的结果乘起来就可以了。 
  还是数学题做少了,不会推式子,还是要多练。
 
  当然还有一个log的方法,就是直接倒着做,其余的完全相同。
 
  两个log:
 
 //It is made by jump~
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <ctime>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
#define RG register
int n,k,MOD;
int dui[],tail; struct juz{
LL s[][];
}a,c[],ini,mi[]; inline int getint()
{
RG int w=,q=; char c=getchar(); while((c<'' || c>'') && c!='-') c=getchar();
if (c=='-') q=, c=getchar(); while (c>='' && c<='') w=w*+c-'', c=getchar(); return q ? -w : w;
} inline juz jia(juz p,juz q){
juz tmp;
for(RG int i=;i<=n;i++)
for(RG int j=;j<=n;j++)
tmp.s[i][j]=p.s[i][j]+q.s[i][j],tmp.s[i][j]%=MOD;
return tmp;
} inline juz cheng(juz p,juz q){
juz tmp;
for(RG int i=;i<=n;i++) for(RG int j=;j<=n;j++) tmp.s[i][j]=;
for(RG int i=;i<=n;i++)
for(RG int j=;j<=n;j++)
for(RG int l=;l<=n;l++)
tmp.s[i][j]+=p.s[i][l]*q.s[l][j],tmp.s[i][j]%=MOD;
return tmp;
} inline void work(){
n=getint(); k=getint(); MOD=getint();
for(RG int i=;i<=n;i++) for(RG int j=;j<=n;j++) ini.s[i][j]=getint();
while(k>) dui[++tail]=k,k>>=; mi[tail]=ini; c[tail]=ini;
for(RG int i=tail-;i>=;i--) {
mi[i]=cheng(mi[i+],mi[i+]);//每次平方
c[i]=jia(c[i+],cheng(c[i+],mi[i+]));//前面的乘以之前的部分再加上自己可降低复杂度
if(dui[i]&) mi[i]=cheng(mi[i],ini),c[i]=jia(c[i],mi[i]);
}
for(RG int i=;i<=n;i++) { for(RG int j=;j<=n;j++) printf("%lld ",c[].s[i][j]); printf("\n"); }
} int main()
{
work();
return ;
}

一个log:

 //It is made by jump~
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <ctime>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
#define RG register
int n,k,MOD;
int dui[],tail; struct juz{
LL s[][];
}a,c[],ini,mi[]; inline int getint()
{
RG int w=,q=; char c=getchar(); while((c<'' || c>'') && c!='-') c=getchar();
if (c=='-') q=, c=getchar(); while (c>='' && c<='') w=w*+c-'', c=getchar(); return q ? -w : w;
} inline juz jia(juz p,juz q){
juz tmp;
for(RG int i=;i<=n;i++)
for(RG int j=;j<=n;j++)
tmp.s[i][j]=p.s[i][j]+q.s[i][j],tmp.s[i][j]%=MOD;
return tmp;
} inline juz cheng(juz p,juz q){
juz tmp;
for(RG int i=;i<=n;i++) for(RG int j=;j<=n;j++) tmp.s[i][j]=;
for(RG int i=;i<=n;i++)
for(RG int j=;j<=n;j++)
for(RG int l=;l<=n;l++)
tmp.s[i][j]+=p.s[i][l]*q.s[l][j],tmp.s[i][j]%=MOD;
return tmp;
} inline void work(){
n=getint(); k=getint(); MOD=getint();
for(RG int i=;i<=n;i++) for(RG int j=;j<=n;j++) ini.s[i][j]=getint();
while(k>) dui[++tail]=k,k>>=; mi[tail]=ini; c[tail]=ini;
for(RG int i=tail-;i>=;i--) {
mi[i]=cheng(mi[i+],mi[i+]);//每次平方
c[i]=jia(c[i+],cheng(c[i+],mi[i+]));//前面的乘以之前的部分再加上自己可降低复杂度
if(dui[i]&) mi[i]=cheng(mi[i],ini),c[i]=jia(c[i],mi[i]);
}
for(RG int i=;i<=n;i++) { for(RG int j=;j<=n;j++) printf("%lld ",c[].s[i][j]); printf("\n"); }
} int main()
{
work();
return ;
}

POJ3233 Matrix Power Series的更多相关文章

  1. [POJ3233]Matrix Power Series 分治+矩阵

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [POJ3233]Matrix Power Series 分治+矩阵 题目大意 A为n×n(n<= ...

  2. POJ3233 Matrix Power Series 矩阵快速幂 矩阵中的矩阵

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

  3. POJ3233]Matrix Power Series && [HDU1588]Gauss Fibonacci

    题目:Matrix Power Series 传送门:http://poj.org/problem?id=3233 分析: 方法一:引用Matrix67大佬的矩阵十题:这道题两次二分,相当经典.首先我 ...

  4. POJ3233:Matrix Power Series(矩阵快速幂+二分)

    http://poj.org/problem?id=3233 题目大意:给定矩阵A,求A + A^2 + A^3 + … + A^k的结果(两个矩阵相加就是对应位置分别相加).输出的数据mod m.k ...

  5. POJ3233 Matrix Power Series(矩阵快速幂+分治)

    Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak. ...

  6. POJ3233:Matrix Power Series(矩阵快速幂+递推式)

    传送门 题意 给出n,m,k,求 \[\sum_{i=1}^kA^i\] A是矩阵 分析 我们首先会想到等比公式,然后得到这样一个式子: \[\frac{A^{k+1}-E}{A-E}\] 发现要用矩 ...

  7. POJ-3233 Matrix Power Series 矩阵A^1+A^2+A^3...求和转化

    S(k)=A^1+A^2...+A^k. 保利求解就超时了,我们考虑一下当k为偶数的情况,A^1+A^2+A^3+A^4...+A^k,取其中前一半A^1+A^2...A^k/2,后一半提取公共矩阵A ...

  8. POJ3233 Matrix Power Series(快速幂求等比矩阵和)

    题面 \(solution:\) 首先,如果题目只要我们求\(A^K\) 那这一题我们可以直接模版矩乘快速幂来做,但是它现在让我们求$\sum_{i=1}^{k}{(A^i)} $ 所以我们思考一下这 ...

  9. poj3233 Matrix Power Series(矩阵快速幂)

    题目要求的是 A+A2+...+Ak,而不是单个矩阵的幂. 那么可以构造一个分块的辅助矩阵 S,其中 A 为原矩阵,E 为单位矩阵,O 为0矩阵    将 S 取幂,会发现一个特性: Sk +1右上角 ...

随机推荐

  1. Linux安装Redis

    环境:Centos 6.2 redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的value ...

  2. iOS数据本地持久化

      p1:归档.Preference(NSUserDefault).沙盒存储 iOS开发中本地存储主要有三种形式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedAr ...

  3. TCP&UDP协议小结

    TCP和UDP 传输层功能 网络安全 Tcp可靠性 Tcp流控 Tcp拥塞控制 Tcp运输连接管理 一个网页可能很大,一个数据包传不过来,就需要分段传输. 网络可能拥塞,某段可能丢失.那必须有人监管, ...

  4. Binary Search Tree Iterator

    Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...

  5. java内部类 2016年12月13号

    1.在外部类的任意位置创建内部类对象的方法: 1)从外部类的非静态方法之外的任意位置创建某个内部类的对象,必须指明这个对象所在的外部类和内部类:OuterClassName.InnerClassNam ...

  6. INADDR_ANY的确切含义

    INADDR_ANY就是inet_addr("0.0.0.0") 首先,需要明确的是当服务器的监听地址是INADDR_ANY时设置的是服务器的IP地址. 其次,当服务器的监听地址是 ...

  7. MJExtension的使用:https://github.com/CoderMJLee/MJExtension

    MJExtension能做什么? MJExtension是一套字典和模型之间互相转换的超轻量级框架 MJExtension能完成的功能 字典(JSON) --> 模型(Model) 模型(Mod ...

  8. 从走出校门到Java实习生生活

    序 男,95年,这个学期就大四了,非计算机专业(数字媒体).目前在二线城市做Java实习生,待遇一般,应该算一个正常的实习生水平吧:租的一个约10平米的小单间,实习工资-衣食住行-杂七杂八的小消费差不 ...

  9. VS 2010配置Qt 4.8.5

    由于早上偶然的一个念想,今天的宝贵时光就奉献给了Qt的安装及其和VS 2010的配置上了. 说实话,开始时真的查找了资料,包括博客.文库.知道等等,作者们写得都很全面,细致. 但自己动手尝试就是错误百 ...

  10. 取当前的地址栏的Url和url中的参数

    看到这样一段代码: exports.showLogin = function (req, res) { req.session._loginReferer = req.headers.referer; ...