POJ 3233 Matrix Power Series(二分等比求和)
Matrix Power Series
【题目链接】Matrix Power Series
【题目类型】二分等比求和
&题解:
这题我原来用vector写的,总是超时,不知道为什么,之后就改用数组了,照着别人的代码敲了一遍
【时间复杂度】O(logn)
&代码:
#include <cstdio>
#include <bitset>
#include <iostream>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long ll;
const int N= 30 +9;
struct Matrix
{
int m[N][N];
};
Matrix I;
int n,k,M;
Matrix add(Matrix a,Matrix b)
{
Matrix c;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
c.m[i][j]=(a.m[i][j]+b.m[i][j])%M;
return c;
}
Matrix multi(Matrix a,Matrix b)
{
Matrix c;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
c.m[i][j]=0;
for(int k=0;k<n;k++)
c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%M;
}
}
return c;
}
Matrix power(Matrix A,ll n)
{
Matrix ans=I;
while(n){
if(n&1)
ans=multi(ans,A);
A=multi(A,A);
n>>=1;
}
return ans;
}
Matrix sum(Matrix A,ll k)
{
if(k==1) return A;
Matrix t=sum(A,k/2);
Matrix cur=power(A,k/2+(k&1));
t=add(t,multi(t,cur));
if(k&1) t=add(t,cur);
return t;
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
// freopen("E:1.txt","r",stdin);
while(cin>>n>>k>>M){
Matrix A;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>A.m[i][j];
A.m[i][j]%=M;
}
I.m[i][i]=1;
}
Matrix ans=sum(A,k);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
cout<<ans.m[i][j]<<" ";
cout<<endl;
}
}
return 0;
}
POJ 3233 Matrix Power Series(二分等比求和)的更多相关文章
- POJ 3233 Matrix Power Series 二分+矩阵乘法
链接:http://poj.org/problem?id=3233 题意:给一个N*N的矩阵(N<=30),求S = A + A^2 + A^3 + - + A^k(k<=10^9). 思 ...
- POJ 3233 Matrix Power Series --二分求矩阵等比数列和
题意:求S(k) = A+A^2+...+A^k. 解法:二分即可. if(k为奇) S(k) = S(k-1)+A^k else S(k) = S(k/2)*(I+A^(k/2)) ...
- 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 ...
- [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: ...
- POJ 3233 Matrix Power Series (矩阵乘法)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 11954 Accepted: ...
- Poj 3233 Matrix Power Series(矩阵乘法)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Description Given a n × n matrix A and ...
随机推荐
- Drying POJ - 3104 二分 最优
题意:有N件湿的衣服,一台烘干机.每件衣服有一个湿度值.每秒会减一,如果用烘干机,每秒会减k.问最少多久可以晒完. 题解:二分.首先时间越长越容易晒完. 其次判定函数可以这样给出:对于答案 X,每一个 ...
- MathType怎么打定积分竖线
MathType怎么打定积分竖线-MathType中文官网 http://www.mathtype.cn/jiqiao/dingjifen-shuxian.html 输入公式后在分隔符模板中选择左竖线 ...
- int 存储大小 数组元素个数
为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符.表达式 sizeof(type) 得到对象或类型的存储字节大小.下面的实例演示了获取 int 类型的大小: 实例 # ...
- python3实现字符串的全排列的方法(无重复字符)
https://www.jb51.net/article/143357.htm 抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时 ...
- golang的json数据解析
import ( "fmt" "time" "github.com/astaxie/beego" " ...
- CF865D Buy Low Sell High 贪心
正解:贪心 解题报告: 传送门! 这题首先有个很显然的dp,太基础了不说QAQ 然后考虑dp是n2的,显然过不去,所以换一个角度 然后发现这题和普通的dp的题有什么不同呢?就它这儿是一天只能买一支股, ...
- es中如何定位不合法搜索
GET /test_index/test_type/_validate/query?explain{ "query": { "math": { "te ...
- cmd远程连接oracle
sqlplus 用户名/密码@IP:端口号/oracle实例
- SHOW STATUS 查看各种类型SQL执行的频率
通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extendedstatus 命令获得.SHOW STATUS 可以根据需要显示 session 级别的统计结果 ...
- dedecms自定义表单提交成功后提示信息修改和跳转链接修改
我们在用dedecms自定义表单提交成功后提示信息一般是"Dedecms 提示信息",这个要怎么改成自己想要的文字呢?还有就是提示页停留时间,目前估计就2秒,太快了,要如何设置长点 ...