POJ 3233 Matrix Power Series(矩阵高速功率+二分法)
职务地址:POJ 3233
题目大意:给定矩阵A,求A + A^2 + A^3 + … + A^k的结果(两个矩阵相加就是相应位置分别相加)。输出的数据mod m。
k<=10^9。
这道题两次二分,相当经典。首先我们知道,A^i能够二分求出。
然后我们须要对整个题目的数据规模k进行二分。比方,当k=6时,有:
A + A^2 + A^3 + A^4 + A^5 + A^6 =(A + A^2 + A^3) + A^3*(A + A^2 + A^3)
应用这个式子后,规模k减小了一半。我们二分求出A^3后再递归地计算A + A^2 + A^3。就可以得到原问题的答案。
代码例如以下:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include <algorithm> using namespace std;
int mod;
int n;
struct matrix
{
int ma[40][40];
}init, res;
matrix Mult(matrix x, matrix y)
{
int i, j, k;
matrix tmp;
memset(tmp.ma,0,sizeof(tmp.ma));
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
tmp.ma[i][j]=(tmp.ma[i][j]+x.ma[i][k]*y.ma[k][j])%mod;
}
}
}
return tmp;
}
matrix Pow(matrix x, int k)
{
matrix tmp;
int i, j;
memset(tmp.ma,0,sizeof(tmp.ma));
for(i=0;i<n;i++) tmp.ma[i][i]=1;
while(k)
{
if(k&1) tmp=Mult(tmp,x);
x=Mult(x,x);
k>>=1;
}
return tmp;
}
matrix add(matrix x, matrix y)
{
int i, j;
matrix tmp;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
tmp.ma[i][j]=(x.ma[i][j]+y.ma[i][j])%mod;
}
}
return tmp;
}
matrix sum(matrix x, int k)
{
matrix tmp, y;
if(k==1) return x;
tmp=sum(x,k/2);
if(k&1)
{
y=Pow(x,k/2+1);
tmp=add(Mult(y,tmp),tmp);
return add(tmp,y);
}
else
{
y=Pow(x,k/2);
return add(Mult(y,tmp),tmp);
}
}
int main()
{
int k, m, x, i, j;
scanf("%d%d%d",&n,&k,&mod);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&x);
init.ma[i][j]=x%mod;
}
}
res=sum(init, k);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d",res.ma[i][j]);
if(j!=n-1) printf(" ");
}
puts("");
}
return 0;
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
POJ 3233 Matrix Power Series(矩阵高速功率+二分法)的更多相关文章
- poj 3233 Matrix Power Series(矩阵二分,高速幂)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 15739 Accepted: ...
- Poj 3233 Matrix Power Series(矩阵乘法)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Description Given a n × n matrix A and ...
- poj 3233 Matrix Power Series 矩阵求和
http://poj.org/problem?id=3233 题解 矩阵快速幂+二分等比数列求和 AC代码 #include <stdio.h> #include <math.h&g ...
- POJ 3233 Matrix Power Series 矩阵快速幂
设S[k] = A + A^2 +````+A^k. 设矩阵T = A[1] 0 E E 这里的E为n*n单位方阵,0为n*n方阵 令A[k] = A ^ k 矩阵B[k] = A[k+1] S[k] ...
- POJ 3233 Matrix Power Series 矩阵快速幂+二分求和
矩阵快速幂,请参照模板 http://www.cnblogs.com/pach/p/5978475.html 直接sum=A+A2+A3...+Ak这样累加肯定会超时,但是 sum=A+A2+...+ ...
- POJ 3233 Matrix Power Series(矩阵等比求和)
题目链接 模板题. #include <cstdio> #include <cstring> #include <iostream> #include <ma ...
- 矩阵十点【两】 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的迹(就是主对角线上各项的 ...
- 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 Total Submissions: 11954 Accepted: ...
随机推荐
- 低压电力采集平台DW710C与PC沟通
集电极485接口RS-485与RS-232转换模块485端相连.RS-485与RS-232转换模块232通过串行电缆末端PC的232串口.我们通过书面沟通PC通信软件来实现双方并执行收购方案. 1)上 ...
- (hdu step 6.3.5)Card Game Cheater(匹配的最大数:a与b打牌,问b赢a多少次)
称号: Card Game Cheater Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- Atitit. 拉开拉链zip文件 最佳实践实施 java c# .net php
Atitit. 拉开拉链zip文件 的实现最佳实践 java c# .net php 1. Jdk zip 跟apache ant zip 1 2. Apache Ant包进行ZIP文件压缩,upzi ...
- centos 彻底删除nodejs默认的安装文件
1> yum remove nodejs npm -y 2> cd /usr/local/lib 移除所有 node 和 node_modules目录 cd /usr/local/in ...
- AWS发布架构师认证的专业解决方案
完成Amazon EC2初始化几个例子就足够了,那么证明你的AWS建筑学专业技术需要长时间使用如何?AWS专业建筑师认证新颖的解决方案出炉! 2013年4月,AWS正式启动AWS认证计划,同时发布AW ...
- shell脚本—根据文件个数定时备份
最近在了解Jenkins时,出现这样一个问题:linux ext3系统目录下的子目录个数不能超过31998个(参考:http://www.xshell.net/linux/1267.html),但je ...
- iOS经常使用快捷键
iOS经常使用的快捷键 command+[:左缩进 command+]:右缩进 control-F: 向右一个字符(forward) control-B: 向左一个字符(backward) cont ...
- (hdu step 7.1.5)Maple trees(凸包的最小半径寻找掩护轮)
称号: Maple trees Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- 如此的相似,不能-------Day84
生活中我们会遇到一些相似事儿,它可能是一个项目,我发现,你失去非常相似,其结果是不,它可以是人.你认为你一直在等待的是他(她),终于可以找到,只需简单地认为.正是这样相似. js和java语言中有不少 ...
- CCBValue
#ifndef __CCB_VALUE_H__ #define __CCB_VALUE_H__ #include "cocos2d.h" #include "Extens ...