蓝桥杯 算法提高 递推求值 【矩阵快速幂】
2018-02-22 00:34
281 查看
算法提高 递推求值
时间限制:1.0s 内存限制:256.0MB问题描述
已知递推公式:F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5,
F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3.
初始值为:F(1, 1)=2, F(1, 2)=3, F(2, 1)=1, F(2, 2)=4, F(3, 1)=6, F(3, 2)=5。
输入n,输出F(n, 1)和F(n, 2),由于答案可能很大,你只需要输出答案除以99999999的余数。
输入格式
输入第一行包含一个整数n。输出格式
输出两行,第一行为F(n, 1)除以99999999的余数,第二行为F(n, 2)除以99999999的余数。样例输入
4样例输出
1421
数据规模和约定
1<=n<=10^18。题意: 略
分析: 这是矩阵快速幂的裸题,写下矩阵的值即可
【f[n - 1,1], f[n - 1,2], f[n-2,1], f[n-2,2], f[n - 3,1], f[n - 3,2],1】 乘上 矩阵得到
【f[n,1], f[n,2], f[n-1,1], f[n-1,2], f[n - 2,1], f[n - 2,2],1】
这个在构造矩阵上,每个人都有每个人的习惯,自己模拟下就好
参考代码
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define mod(x) (x) % MOD const ll MOD = 99999999; struct mat { ll m[10][10]; }a,unit,res; void init() { res.m[1][1] = 6; res.m[1][2] = 5; res.m[1][3] = 1; res.m[1][4] = 4; res.m[1][5] = 2; res.m[1][6] = 3; res.m[1][7] = 1; a.m[2][1] = 1; a.m[5][1] = 2; a.m[7][1] = 5; a.m[1][2] = 1; a.m[6][2] = 2; a.m[7][2] = 3; a.m[1][3] = 1; a.m[2][4] = 1; a.m[3][5] = 1; a.m[4][6] = 1; a.m[7][7] = 1; a.m[5][2] = 3; } mat operator * (mat m1,mat m2) { mat t; for (int i = 1; i <= 7; i++) { for (int j = 1; j <= 7; j++) { ll l = 0; for (int k = 1; k <= 7; k++) { l = mod(l + m1.m[i][k] * m2.m[k][j]); } t.m[i][j] = l; } } return t; } void quick_pow(ll n) { while (n) { if(n & 1) { res = res * a; } a = a * a; n >>= 1; } } int main() { ll n;cin>>n; if(n == 1) { cout<<2<<endl<<3<<endl; } else if(n == 2) { cout<<1<<endl<<4<<endl; } else if(n == 3) { cout<<6<<endl<<5<<endl; } else { init(); quick_pow(n - 3); cout<<res.m[1][1]<<endl<<res.m[1][2]<<endl; } return 0; }
如有错误或遗漏,请私聊下UP,thx
相关文章推荐
- 蓝桥杯算法提高——递推求值(矩阵快速幂)
- 蓝桥杯算法提高 递推求值 【矩阵快速幂】
- 算法提高 递推求值 (矩阵快速幂)
- 蓝桥杯:递推求值(快速幂,矩阵快速幂)
- 蓝桥杯 算法提高 快速幂 快速幂longlong 下最稳的姿势
- 蓝桥杯 ADV-208 算法提高 矩阵相乘
- 蓝桥杯 算法提高 矩阵乘法 【经典区间dp】
- 蓝桥杯 算法提高 递推求值
- 蓝桥杯 算法提高 矩阵乘方
- 蓝桥杯 ADV-208 算法提高 矩阵相乘
- 蓝桥杯 算法提高 矩阵乘法 区间dp
- 算法提高 矩阵乘法 蓝桥杯
- 蓝桥杯 算法提高 矩阵乘法 (区间dp)
- 蓝桥杯 递推求值(矩阵快速幂)
- 蓝桥杯 算法训练 矩阵乘方(矩阵快速幂取模)
- 蓝桥杯 算法提高 矩阵乘法(Java解题)
- 蓝桥杯算法提高 矩阵乘法
- 算法-蓝桥杯-算法提高 矩阵相乘 (C++)
- 蓝桥杯_算法提高_快乐的司机(快速排序、贪心算法)
- 算法笔记_081:蓝桥杯练习 算法提高 矩阵乘法(Java)