HDU.1757 A Simple Math Problem (矩阵快速幂)
来源:互联网 发布:在淘宝怎么卖二手东西 编辑:程序博客网 时间:2024/06/06 13:08
HDU.1757 A Simple Math Problem (矩阵快速幂)
点我挑战题目
题意分析
给出一个递推式:
1.x<=9时,f(x) = x,
2.x>9时,f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10).
现在想让你求解f(k) % m 的值为多少.
当x<=9时,特判输出x % m.
当x>9是,构造如下矩阵乘法:
等于
乘
如此便可得到最后结果。
代码总览
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <sstream>#include <set>#include <map>#include <queue>#include <stack>#include <cmath>#define INF 0x3f3f3f3f#define nmax 200#define MEM(x) memset(x,0,sizeof(x))using namespace std;const int Dmax = 11;int N = 10;int MOD;typedef struct{ int matrix[Dmax][Dmax]; void init()//初始化为单位矩阵 { memset(matrix,0,sizeof(matrix)); for(int i = 0; i<Dmax;++i) matrix[i][i] = 1; }}MAT;MAT ADD(MAT a, MAT b){ for(int i = 0; i<N;++i){ for(int j = 0;j<N;++j){ a.matrix[i][j] +=b.matrix[i][j]; a.matrix[i][j] %= MOD; } } return a;}MAT MUL(MAT a, MAT b){ MAT ans; for(int i = 0; i<N;++i){ for(int j = 0; j<N;++j){ ans.matrix[i][j] = 0; for(int k = 0; k<N;++k){ ans.matrix[i][j] += ( (a.matrix[i][k] % MOD) * (b.matrix[k][j] % MOD) ) % MOD; } ans.matrix[i][j] %= MOD; } } return ans;}MAT POW(MAT a, int t){ MAT ans; ans.init(); while(t){ if(t&1) ans = MUL(ans,a); t>>=1; a = MUL(a,a); } return ans;}void OUT(MAT a){ for(int i = 0; i<N;++i){ for(int j = 0; j<N;++j){ printf("%5d",a.matrix[i][j]); } printf("\n"); }}void IN(MAT & a,MAT & temp){ memset(a.matrix,0,sizeof(a.matrix)); memset(temp.matrix,0,sizeof(temp.matrix)); for(int i = 0; i<N;++i) a.matrix[i][0] = 9-i; for(int i = 0; i<N;++i) scanf("%d",&temp.matrix[0][i]); for(int i = 1; i<N;++i) temp.matrix[i][i-1] = 1;}void CAL(MAT a){ printf("%d\n",a.matrix[0][0] % MOD);}int main(){ //freopen("in.txt","r",stdin); int K; while(scanf("%d%d",&K,&MOD) != EOF){ if(K<=9){ printf("%d\n",K); continue; } MAT init,temp; IN(init,temp); temp = POW(temp,K-9); temp = MUL(temp,init); CAL(temp); } return 0;}
阅读全文
0 0
- HDU - problem 1757 A Simple Math Problem【矩阵 + 快速幂】
- hdu - 1757 - A Simple Math Problem(矩阵快速幂)
- hdu 1757 A Simple Math Problem(矩阵快速幂)
- hdu 1757 A Simple Math Problem (矩阵快速幂)
- [HDU 1757] A Simple Math Problem (矩阵快速幂)
- HDU 1757-A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem 矩阵快速幂
- hdu 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem (矩阵快速幂)
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- hdu 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem 矩阵快速幂
- HDU 1757 A Simple Math Problem 矩阵快速幂
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem 矩阵快速幂
- HDU 1757 A Simple Math Problem (矩阵+快速幂)
- HDU 1757-A Simple Math Problem(矩阵快速幂)
- 学习笔记TF009:对数几率回归
- Educational Codeforces Round 21 B. Average Sleep Time
- wireshark总体结构
- angular + bootstrap
- 耦合的分类
- HDU.1757 A Simple Math Problem (矩阵快速幂)
- code forces Educational Codeforces Round 21
- mongodb用户管理1
- Struts2_Action名称的搜索顺序
- MYSQL一揽子方案汇总
- 数据结构--线性表
- 会议纪要的正确记录姿势
- UI素材库导航
- MySQL一揽子方案高级