矩阵快速幂+二分 poj3233
#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[][];
}init, res;
matrix Mult(matrix x, matrix y)
{
int i,j,k;
matrix tmp;
memset(tmp.ma,,sizeof(tmp.ma));
for(i=;i<n;i++)
for(j=;j<n;j++)
for(k=;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,,sizeof(tmp.ma));
for(i=;i<n;i++) tmp.ma[i][i]=;
while(k){
if(k&) tmp=Mult(tmp,x);
x=Mult(x,x);
k>>=;
}
return tmp;
}
matrix add(matrix x, matrix y)
{
int i, j;
matrix tmp;
for(i=;i<n;i++)
for(j=;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==) return x;
tmp=sum(x,k/);
if(k&){
y=Pow(x,k/+);
tmp=add(Mult(y,tmp),tmp);
return add(tmp,y);
}
else{
y=Pow(x,k/);
return add(Mult(y,tmp),tmp);
}
}
int main()
{
int k,m,x,i,j;
scanf("%d%d%d",&n,&k,&mod);
for(i=;i<n;i++){
for(j=;j<n;j++){
scanf("%d",&x);
init.ma[i][j]=x%mod;
}
}
res=sum(init, k);
for(i=;i<n;i++){
for(j=;j<n;j++){
printf("%d",res.ma[i][j]);
if(j!=n-) printf(" ");
}
puts("");
}
return ;
}
矩阵快速幂+二分 poj3233的更多相关文章
- POJ3233:Matrix Power Series(矩阵快速幂+二分)
http://poj.org/problem?id=3233 题目大意:给定矩阵A,求A + A^2 + A^3 + … + A^k的结果(两个矩阵相加就是对应位置分别相加).输出的数据mod m.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 (矩阵快速幂+二分求解)
题意:求S=(A+A^2+A^3+...+A^k)%m的和 方法一:二分求解S=A+A^2+...+A^k若k为奇数:S=(A+A^2+...+A^(k/2))+A^(k/2)*(A+A^2+...+ ...
- 2017 ECJTU ACM程序设计竞赛 矩阵快速幂+二分
矩阵 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submission ...
- HDU 4549 (费马小定理+矩阵快速幂+二分快速幂)
M斐波那契数列 Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Statu ...
- POJ 3233 矩阵快速幂&二分
题意: 给你一个n*n的矩阵 让你求S: 思路: 只知道矩阵快速幂 然后nlogn递推是会TLE的. 所以呢 要把那个n换成log 那这个怎么搞呢 二分! 当k为偶数时: 当k为奇数时: 就按照这么搞 ...
- HDU:Gauss Fibonacci(矩阵快速幂+二分)
http://acm.hdu.edu.cn/showproblem.php?pid=1588 Problem Description Without expecting, Angel replied ...
- 经典矩阵快速幂之一-----poj3233(矩阵套矩阵
题意:给你一个矩阵A,求S=A+A^2+A^3+...+A^k. 其实这个当时我看着毫无头绪,看了他们给的矩阵发现好!精!妙! 我们这样看 是不是有点思路! 没错!就是右上角,我们以此类推可以得到A+ ...
- SPOJ AMR10E Stocks Prediction --二分求和+矩阵快速幂
题意:给一个递推式S(n) = a1*S(n-1)+...+aR*S(n-R),要求S(k)+S(2k)+...+S(nk)的值. 分析:看到n的大小和递推式,容易想到矩阵快速幂.但是如何转化呢? 首 ...
随机推荐
- 为什么你应该使用 Object.is() 进行相等性比较(译)
Title: Why you should use Object.is() in equality comparison Author: TarekAlQaddy Website: https://w ...
- 使用touch操作图片
功能: 1.图片放大缩小 2.图片移动 3.图片上做点标记 PS 1.后端程序员不容易,且行且珍惜 2.代码不想封装,累 js代码 /**************************calc pi ...
- 【巨杉数据库SequoiaDB】省级农信国产分布式数据库应用实践
本文转载自<金融电子化> 原文链接:https://mp.weixin.qq.com/s/WGG91Rv9QTBHPsNVPG8Z5g 随着移动互联网的迅猛发展,分布式架构在互联网IT技术 ...
- javaScript中的异步编程模式
1.事件模型 let button = document.getElementById("my-btn"); button.onclick = function(event) { ...
- 关于java静态存储类的一个知识点
今天在写代码的时候产生了一个很奇怪的问题:静态类里的数据在其他类中更改之后,是否会保存 然后就动手试验了一下,结果是 ·在更改数据的类中,输出数据都是更够以后的数据 ·在先执行更改数据的类之后执行第二 ...
- svn提交更新代码提示Please execute the 'Cleanup' command 的解决办法
那可能是提交或更新代码的过程意外终止,第二次提交或更新会报这个错误 更新或上传的时候动作没有完成,导致本地存在锁定状态没有释放 或者有文件正在更新或上传,该文件夹被锁定. 解决办法: 将对应文件夹里的 ...
- Pascal运行错误表
(A)DOS错误代码 1:错误的功能代码尝试错误的操作系统调用.2:文件未找到程序试图删除.重命名和打开一个不存在的文件.3:目录未发现目录不存在或是错误,也有可能是访问一个不存在的文件.4:打开太多 ...
- pymysql 连接池
pymysql连接池 import pymysql from DBUtils.PooledDB import PooledDB, SharedDBConnection ''' 连接池 ''' clas ...
- 假期学习【六】Python网络爬虫2020.2.4
今天通过Python网络爬虫视频复习了一下以前初学的网络爬虫,了解了网络爬虫的相关规范. 案例:京东的Robots协议 https://www.jd.com/robots.txt 说明可以爬虫的范围 ...
- 洛谷P 1427 小鱼的数字游戏
题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的 ...