7_22_F题 Recurrences(矩阵快速幂)
来源:互联网 发布:酒店网络设计方案 编辑:程序博客网 时间:2024/06/04 17:52
7_22_F题 Recurrences(矩阵快速幂)
题意
当n > d 时有
给出
思路
很明显的矩阵快速幂,转移矩阵如下
然后直接矩阵快速幂就行了。
代码
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 16;typedef long long ll;ll mod,d;ll a[maxn];ll f[maxn];struct Mat { ll maze[maxn][maxn]; Mat(){ memset(maze,0,sizeof maze); }};int choose;Mat Mat_mul(const Mat& a, const Mat& b){ Mat res; for(int i = 0; i < d; i++) for(int j = 0; j < d; j++){ res.maze[i][j] = 0; for(int k = 0; k < d; k++) { res.maze[i][j] = (res.maze[i][j] + (a.maze[i][k] * b.maze[k][j])%mod) % mod; } } return res;}Mat Mat_Qpow(int n){ Mat base,res; for(int i = 0 ; i < maxn ; i ++) base.maze[0][i] = a[i]%mod; for(int i = 1 ; i < maxn ; i ++) base.maze[i][i-1] = 1; for(int i = 0 ; i < maxn ; i ++) res.maze[i][i] = 1; while(n > 0){ if(n & 1) { res = Mat_mul(res, base); } base = Mat_mul(base, base); n >>= 1; } return res;}int main(){ ll n; while(~scanf("%lld %lld %lld", &d, &n, &mod),mod){ memset(a,0,sizeof a); for(int i = 0 ; i < d ; i ++) scanf("%lld",a + i); for(int i = 0 ; i < d ; i ++) scanf("%lld",f + i); auto ans= Mat_Qpow(n-d); ll sum = 0; for(int i = 0 ; i < d ; i ++) sum = (sum + ans.maze[0][i]*f[d-i-1])%mod; if(n <= d) sum = f[n-1]%mod; printf("%lld\n", sum); } return 0;}
0 0
- 7_22_F题 Recurrences(矩阵快速幂)
- uva10870 Recurrences 矩阵快速幂
- uva10870 Recurrences矩阵快速幂
- 【矩阵快速幂】Recurrences UVA
- UVA 10870 Recurrences 矩阵快速幂
- UVa 10870 Recurrences / 矩阵快速幂
- UVA 10870 - Recurrences(矩阵快速幂)
- uva 10870 - Recurrences(矩阵快速幂)
- UVA - 10870 Recurrences (矩阵快速幂)
- UVA - 10870 Recurrences 矩阵快速幂
- uva 10870 Recurrences(矩阵快速幂)
- UVA - 10870 Recurrences (矩阵快速幂)
- UVa - 10870 - Recurrences ( 矩阵快速幂 )
- UVa 10870 Recurrences (矩阵快速幂)
- UVA 10870 Recurrences(矩阵快速幂)
- UVA10870 Recurrences —— 矩阵快速幂
- UVa 10870 - Recurrences (矩阵构造 矩阵快速幂)
- Uva 10870 Recurrences 解题报告(矩阵快速幂)
- Android 自定义View (一)
- oclint规则 Size(大小)
- Android 自定义View (二) 进阶
- Ant 打包war 生成文件内容build.xml
- 深入浅出数据分析 学习笔记
- 7_22_F题 Recurrences(矩阵快速幂)
- Android图片加载神器之Fresco-Java代码实现圆形圆角效果
- Android Studio你不知道的快捷键(二)
- 使用github+Hexo人人都能拥有一个美美的博客
- 7_22_G Yet another Number Sequence(矩阵快速幂)
- 7_22_N题 I Hate It(线段树)
- 有n枚硬币按照0到n-1对它们进行编号,其中编号为i的硬币面额为vi,两个人轮流从剩下硬币中取出一枚硬币归自己所有,但每次取硬币的时候只能取剩下的硬币中编号最小的硬币或者编号最大的硬币,在两个都采用最
- 正则表达式过滤
- 7_22_O题 敌兵布阵(线段树)