pku 3233 Matrix Power Series
来源:互联网 发布:java ee javaweb 编辑:程序博客网 时间:2024/05/17 10:42
Description
Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.
Input
The input contains exactly one test case. The first line of input contains three positive integers n (n ≤ 30), k (k ≤ 109) and m (m < 104). Then follow n lines each containing n nonnegative integers below 32,768, giving A’s elements in row-major order.
Output
Output the elements of S modulo m in the same way as A is given.
Sample Input
2 2 4
0 1
1 1
Sample Output
1 2
2 3
Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.
Input
The input contains exactly one test case. The first line of input contains three positive integers n (n ≤ 30), k (k ≤ 109) and m (m < 104). Then follow n lines each containing n nonnegative integers below 32,768, giving A’s elements in row-major order.
Output
Output the elements of S modulo m in the same way as A is given.
Sample Input
2 2 4
0 1
1 1
Sample Output
1 2
2 3
#include <stdio.h>struct Matrix { int a[30][30];};Matrix E;int n, k, m;void InitE() { for (int i = 0; i < 30; i++) for (int j = 0; j < 30; j++) E.a[i][j] = (i == j);}Matrix MatMul(Matrix A, Matrix B) { Matrix C; for (int i = 0; i < n; i++) for (int k = 0; k < n; k++) { C.a[i][k] = 0; for (int j = 0; j < n; j++) C.a[i][k] = (C.a[i][k] + (A.a[i][j] * B.a[j][k]) % m) % m; } return C;}Matrix MatPow(Matrix A, int n) { Matrix C = E; while (n > 0) { if (n & 1) C = MatMul(C, A); A = MatMul(A, A); n >>= 1; } return C;}Matrix MatPlus(Matrix A, Matrix B) { for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A.a[i][j] = (A.a[i][j] + B.a[i][j]) % m; return A;}Matrix Sum(Matrix A, int k) { if (k == 1) return A; Matrix temp, B; temp = Sum(A, k/2); if (k & 1) { B = MatPow(A, k / 2 + 1); temp = MatPlus(temp, MatMul(temp, B)); temp = MatPlus(temp, B); } else { B = MatPow(A, k/2); temp = MatPlus(temp, MatMul(temp, B)); } return temp;}int main() { scanf("%d%d%d", &n, &k, &m); Matrix A, B; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) scanf("%d", &A.a[i][j]); InitE(); B = Sum(A, k); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) printf("%d ", B.a[i][j]); printf("\n"); } return 0;}
0 0
- PKU 3233 Matrix Power Series
- pku 3233 Matrix Power Series
- pku 3233 Matrix Power Series(矩阵快速幂)
- PKU 3233 Matrix Power Series(矩阵快速幂 二分)
- POJ 3233 Matrix Power Series
- POJ 3233Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- Poj 3233 Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233:Matrix Power Series
- WPF 样式的应用
- dataGridView1自动给行添加序号
- 还是老老实实地回来了
- 多线程读书笔记二(java内存模型、volatile变量、内存模型与synchronized、CAS)
- Blend 3.0入门之SketchFlow详解(下)
- pku 3233 Matrix Power Series
- android基础入门控件详解(5)
- OpenCV随笔003-如何存取像素值
- 根据字体多少使UILabel自动调节尺寸
- arm 中汇编.S文件注意与不懂
- 图论模板
- php 简评file_get_contents与curl 效率及稳定性
- AJAX请求异常代码含义
- linux下的进程等待(wait和waitpid)