传送门

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(矩阵快速幂)相关推荐

  1. Matrix Power Series(矩阵快速幂,二分法/构造矩阵套矩阵)

    传送门 题意: 思路: 方法一:(二分) 分析: 奇偶分类讨论: 1.代码: #include <iostream> #include <cstdio> #include &l ...

  2. POJ 3233 Matrix Power Series 矩阵快速幂 + 二分

    题意:求矩阵的次方和 解题思路:最容易想到方法就是两次二分因为 我们可以把一段  A^1 + A^2 + .......A^K   变成  A^1 + ..A^(K/2) +( A^1 + ..A^( ...

  3. POJ3233 Matrix Power Series

    原题传送:http://poj.org/problem?id=3233 两个二分:二分 k ,二分矩阵. 求Sn = A + A2 + A3 + - + Ak. 首先我们能矩阵二分快速幂计算出Ak,那 ...

  4. I-Matrix Power Series POJ - 3233 矩阵快速幂+分治

    I-Matrix Power Series POJ - 3233 矩阵快速幂+分治 Problem Description Given a n × n matrix A and a positive ...

  5. 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. ...

  6. 【矩阵乘法】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 ...

  7. poj3233(矩阵快速幂的和)

    题目链接:http://poj.org/problem?id=3233 Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K T ...

  8. 【矩阵快速幂】233 Matrix HDU - 5015

    Think: 1知识点:矩阵快速幂 2题意:定义一个233矩阵,第一行形如233, 23333, 233333, 233-(即a[0][1] = 233, a[0][2] = 2333,a[0][3] ...

  9. POJ 3233 Matrix Power Series (矩阵分块,递推)

    矩阵乘法是可以分块的,而且幂的和也是具有线性的. 不难得到 Si = Si-1+A*Ai-1,Ai = A*Ai-1.然后矩阵快速幂就可以了. /*************************** ...

  10. HDU - 5015 233 Matrix(矩阵快速幂)

    题目链接:点击查看 题目大意:初始化:第一行依次为233,2333,23333....第一列依次为a0,a1,a2....(题目中会给出),再给出递推公式:,求矩阵中第n行m列的数字是多少 题目分析: ...

最新文章

  1. Fastp对fastq质控
  2. 微软亚研提出VL-BERT:通用的视觉-语言预训练模型
  3. rest服务器性能,使用多线程提高REST服务性能
  4. 【无线串口模块快速选型指南】通信频点、芯片、通信距离、功率灵敏度、电流 空中速率
  5. 连接不上mysqlworkbench问题解决方法
  6. 首提“智能X效应”,英特尔携手产业加速智能变革
  7. 在shell中获取当前机器的ip地址
  8. scala 高级十六 scala 集合和集合的高级特性 map flatten fllatmap zip reduce zip 等操作...
  9. oracle存储过程中返回一个程序集
  10. git flow 分支合并
  11. 太强了!GitHub中文开源项目榜单出炉,暴露了程序员的硬性需求!
  12. 浏览器的语音识别功能
  13. jQuery中的Sizzle引擎分析
  14. 召唤神龙无敌版------小鱼吃大龙
  15. 谷歌AI人工智能:我们的原则
  16. mysql面试题学校三表查询_mysql经典面试题之学生成绩表
  17. 电容的工作原理、分类选择与应用
  18. AttributeError:‘float‘ object has no attribute ‘astype‘
  19. srm555 div2
  20. Map函数 中的compute简单使用-----记录

热门文章

  1. linux 离线 nfs,Linux 系统 NFS服务
  2. linux查询语言,Linux结构化查询语言SQL——SQL的分类和DDL使用
  3. java log4j 多线程_针对log4j 1.2.15中的并发锁问题,到底是io瓶颈,还是锁竞争导致线程block?...
  4. 4符号代码_身为程序员我敢跟你打赌100块,这个数学符号你根本不会认不会写...
  5. matlab 结构体遍历,matlab 遍历结构体struc的成员
  6. redis统计用户日活量_【赵强老师】Redis案例分析:用setbit统计活跃用户
  7. Mac 安装Pytorch, Jupyter notebook, conda, python3
  8. 自动驾驶1-7: 进入自动驾驶汽车行业的建议Advice for Breaking into the Self-Driving Cars Industry
  9. 容器技术Docker K8s 28 容器服务ACK基础与进阶-弹性伸缩
  10. 算法:判断二叉树是否包含链表Linked List in Binary Tree