poj 3233 Matrix Power Series nyoj 299
来源:互联网 发布:smtp服务器端口25 编辑:程序博客网 时间:2024/06/06 11:00
题目来源:http://poj.org/problem?id=3233
题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=299
本题用二分,快速幂来求;
A+A^2+A^3+A^4+·······A^k;
当k是奇数时, sum = (A + A^2+······A^(k/2)) + A^(k/2+1)[A + A^2 + ····A^(K/2)] + A^k;
当k是偶数的时候,sum = (A + ·······A^(k/2)) + A^(k/2)[A + A^2 + ····A^(k/2)];
因此可以利用二分的性质求累加和,至于A^k当然是快速幂了。
#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int MAXN = 35;struct Matrix{ int iMatrix[MAXN][MAXN];};int n, iMod;Matrix iPer, A;void Inite_Matrix(){ int i, j; for(i = 0; i < n; ++i) { for(j = 0; j < n; ++j) { scanf("%d", &A.iMatrix[i][j]); A.iMatrix[i][j] %= iMod; iPer.iMatrix[i][j] = (i == j);//单位矩阵 } }}Matrix Multi_Matrix(Matrix a, Matrix b)//两个矩阵相乘{ int i, j, k; Matrix c; for(i = 0; i < n; ++i) { for(j = 0; j < n; ++j) { c.iMatrix[i][j] = 0; for(k = 0; k < n; ++k) c.iMatrix[i][j] += a.iMatrix[i][k] * b.iMatrix[k][j]; c.iMatrix[i][j] %= iMod; } } return c;}Matrix Add_Matrix(Matrix a, Matrix b)//相加{ int i, j; Matrix c; for(i = 0; i < n; ++i) for(j = 0; j < n; ++j) c.iMatrix[i][j] = (a.iMatrix[i][j] + b.iMatrix[i][j])%iMod; return c;}Matrix Quick_Matrix_Power(int k)//矩阵快速幂{ Matrix c, tmp; c = iPer; tmp = A; while(k) { if(k&1) { c = Multi_Matrix(c, tmp); k--; } else { k >>= 1; tmp = Multi_Matrix(tmp, tmp); } } return c;}Matrix Binary_Search_MatrixSum(int k)//求前k项的和{ if(k == 1) return A; Matrix tmp, b; tmp = Binary_Search_MatrixSum(k>>1); if(k&1) { b = Quick_Matrix_Power((k>>1) + 1); tmp = Add_Matrix(tmp, Multi_Matrix(tmp, b)); tmp = Add_Matrix(tmp, b); } else { b = Quick_Matrix_Power(k>>1); tmp = Add_Matrix(tmp, Multi_Matrix(tmp, b)); } return tmp;}int main(){ int i, j, k; Matrix res; while(~scanf("%d %d %d", &n, &k, &iMod)) { Inite_Matrix(); res = Binary_Search_MatrixSum(k); for(i = 0; i < n; ++i) { for(j = 0; j < n-1; ++j) printf("%d ", res.iMatrix[i][j]); printf("%d\n", res.iMatrix[i][j]); } } return 0;}
0 0
- poj 3233 Matrix Power Series nyoj 299
- 【矩阵快速幂】POJ 3233 && NYOJ 298 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
- POJ 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- OpenCV之cvSmooth函数平滑滤波
- ant打包build.xml配置
- 微弱光芒暖人心
- 如何用各种编程语言杀死一条龙
- “关于”对话框
- poj 3233 Matrix Power Series nyoj 299
- 雾霾来了
- Flood fill 算法
- 列表界面Iphone式平滑效果实现
- 阅江楼游记
- jclasslib修改class文件内容
- Hadoop初探之Hadoop生态圈
- 我的贝贝
- 如何在 javascript / js 中 建立一个map