[POJ3233] Matrix Power Series(矩阵快速幂)
传送门
k <= 109 暴力肯定超时
根据矩阵性质,可以发现
S(4) = A1 + A2 + A2 * (A1 + A2)
S(5) = A1 + A2 + A2 * (A1 + A2) + A5
所以可以递归二分求解,分别判断 Ak,k 为奇数和偶数的情况
——代码
1 #include <cstdio> 2 #include <cstring> 3 4 struct Matrix 5 { 6 int a[30][30]; 7 Matrix() 8 { 9 memset(a, 0, sizeof(a)); 10 } 11 }; 12 13 int n, k, p; 14 Matrix I, P; 15 16 inline Matrix operator * (const Matrix x, const Matrix y) 17 { 18 Matrix ans; 19 int i, j, k; 20 for(i = 0; i < n; i++) 21 for(j = 0; j < n; j++) 22 for(k = 0; k < n; k++) 23 ans.a[i][j] = (ans.a[i][j] + x.a[i][k] * y.a[k][j]) % p; 24 return ans; 25 } 26 27 inline Matrix operator + (const Matrix x, const Matrix y) 28 { 29 Matrix ans; 30 int i, j; 31 for(i = 0; i < n; i++) 32 for(j = 0; j < n; j++) 33 ans.a[i][j] = (ans.a[i][j] + x.a[i][j] + y.a[i][j]) % p; 34 return ans; 35 } 36 37 inline Matrix operator ^ (Matrix x, int y) 38 { 39 Matrix ans = I; 40 while(y) 41 { 42 if(y & 1) ans = ans * x; 43 x = x * x; 44 y >>= 1; 45 } 46 return ans; 47 } 48 49 inline Matrix work(Matrix x, int y) 50 { 51 if(!y) return P; 52 Matrix ans = work(x, y >> 1); 53 ans = ans + (x ^ (y >> 1)) * ans; 54 if(y & 1) ans = ans + (x ^ y); 55 return ans; 56 } 57 58 int main() 59 { 60 int i, j; 61 Matrix ans; 62 for(i = 0; i < 30; i++) I.a[i][i] = 1; 63 while(~scanf("%d %d %d", &n, &k, &p)) 64 { 65 for(i = 0; i < n; i++) 66 for(j = 0; j < n; j++) 67 scanf("%d", &ans.a[i][j]); 68 ans = work(ans, k); 69 for(i = 0; i < n; i++) 70 { 71 for(j = 0; j < n; j++) printf("%d ", ans.a[i][j]); 72 puts(""); 73 } 74 } 75 return 0; 76 }
View Code
转载于:https://www.cnblogs.com/zhenghaotian/p/6845453.html
[POJ3233] Matrix Power Series(矩阵快速幂)相关推荐
- Matrix Power Series(矩阵快速幂,二分法/构造矩阵套矩阵)
传送门 题意: 思路: 方法一:(二分) 分析: 奇偶分类讨论: 1.代码: #include <iostream> #include <cstdio> #include &l ...
- POJ 3233 Matrix Power Series 矩阵快速幂 + 二分
题意:求矩阵的次方和 解题思路:最容易想到方法就是两次二分因为 我们可以把一段 A^1 + A^2 + .......A^K 变成 A^1 + ..A^(K/2) +( A^1 + ..A^( ...
- POJ3233 Matrix Power Series
原题传送:http://poj.org/problem?id=3233 两个二分:二分 k ,二分矩阵. 求Sn = A + A2 + A3 + - + Ak. 首先我们能矩阵二分快速幂计算出Ak,那 ...
- I-Matrix Power Series POJ - 3233 矩阵快速幂+分治
I-Matrix Power Series POJ - 3233 矩阵快速幂+分治 Problem Description Given a n × n matrix A and a positive ...
- POJ 3233 Matrix Power Serie (矩阵快速幂)
Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + - + Ak. ...
- 【矩阵乘法】Matrix Power Series(poj 3233)
Matrix Power Series poj 3233 题目大意 给你一个矩阵A,让你求S=A+A2+A3+-+AkS = A + A^2 + A^3 + - + A^kS=A+A2+A3+-+Ak ...
- poj3233(矩阵快速幂的和)
题目链接:http://poj.org/problem?id=3233 Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K T ...
- 【矩阵快速幂】233 Matrix HDU - 5015
Think: 1知识点:矩阵快速幂 2题意:定义一个233矩阵,第一行形如233, 23333, 233333, 233-(即a[0][1] = 233, a[0][2] = 2333,a[0][3] ...
- POJ 3233 Matrix Power Series (矩阵分块,递推)
矩阵乘法是可以分块的,而且幂的和也是具有线性的. 不难得到 Si = Si-1+A*Ai-1,Ai = A*Ai-1.然后矩阵快速幂就可以了. /*************************** ...
- HDU - 5015 233 Matrix(矩阵快速幂)
题目链接:点击查看 题目大意:初始化:第一行依次为233,2333,23333....第一列依次为a0,a1,a2....(题目中会给出),再给出递推公式:,求矩阵中第n行m列的数字是多少 题目分析: ...
最新文章
- Fastp对fastq质控
- 微软亚研提出VL-BERT:通用的视觉-语言预训练模型
- rest服务器性能,使用多线程提高REST服务性能
- 【无线串口模块快速选型指南】通信频点、芯片、通信距离、功率灵敏度、电流 空中速率
- 连接不上mysqlworkbench问题解决方法
- 首提“智能X效应”,英特尔携手产业加速智能变革
- 在shell中获取当前机器的ip地址
- scala 高级十六 scala 集合和集合的高级特性 map flatten fllatmap zip reduce zip 等操作...
- oracle存储过程中返回一个程序集
- git flow 分支合并
- 太强了!GitHub中文开源项目榜单出炉,暴露了程序员的硬性需求!
- 浏览器的语音识别功能
- jQuery中的Sizzle引擎分析
- 召唤神龙无敌版------小鱼吃大龙
- 谷歌AI人工智能:我们的原则
- mysql面试题学校三表查询_mysql经典面试题之学生成绩表
- 电容的工作原理、分类选择与应用
- AttributeError:‘float‘ object has no attribute ‘astype‘
- srm555 div2
- Map函数 中的compute简单使用-----记录
热门文章
- linux 离线 nfs,Linux 系统 NFS服务
- linux查询语言,Linux结构化查询语言SQL——SQL的分类和DDL使用
- java log4j 多线程_针对log4j 1.2.15中的并发锁问题,到底是io瓶颈,还是锁竞争导致线程block?...
- 4符号代码_身为程序员我敢跟你打赌100块,这个数学符号你根本不会认不会写...
- matlab 结构体遍历,matlab 遍历结构体struc的成员
- redis统计用户日活量_【赵强老师】Redis案例分析:用setbit统计活跃用户
- Mac 安装Pytorch, Jupyter notebook, conda, python3
- 自动驾驶1-7: 进入自动驾驶汽车行业的建议Advice for Breaking into the Self-Driving Cars Industry
- 容器技术Docker K8s 28 容器服务ACK基础与进阶-弹性伸缩
- 算法:判断二叉树是否包含链表Linked List in Binary Tree