UVA - 10870 Recurrences (矩阵快速幂)
来源:互联网 发布:adidas跑鞋系列 知乎 编辑:程序博客网 时间:2024/05/29 18:59
Recurrences
Time Limit: 3000MS 64bit IO Format: %lld & %llu
Description
题意:
考虑线性递推关系f(n)=a1*f(n-1)+a2*f(n-2)+a3*f(n-3)+...+ad*f(n-d),给你三个整数n,m,d 与数组a与f,让你计算f(n)%m。
分析:矩阵快速幂模板题。
#include <algorithm>#include <iostream>#include <sstream>#include <cstring>#include <cstdlib>#include <string>#include <vector>#include <cstdio>#include <cmath>#include <queue>#include <stack>#include <map>#include <set>using namespace std;#define INF 0x3f3f3f3fconst long long N=1e5+5;long long mod=1e9;const double PI=acos(-1.0);typedef long long ll;typedef struct { int mat[16][16];}Mat;int n,d,m;Mat multi(Mat a,Mat b) { Mat c; memset(c.mat, 0, sizeof(c.mat)); for (int i=1; i<=d; i++) { for (int j=1; j<=d; j++) { for (int k=1; k<=d; k++) { c.mat[i][j]=(c.mat[i][j]+a.mat[i][k]*b.mat[k][j])%mod; } } } return c;}Mat qui(Mat a,ll b) { Mat c; memset(c.mat, 0, sizeof(c.mat)); for (int i=1; i<=d; i++) { c.mat[i][i]=1; } while (b) { if (b&1) { c=multi(c, a); } a=multi(a, a); b>>=1; } return c;}int main() { int a[16],f[16]; Mat A; while (cin>>d>>n>>m&&d) { mod=m; for (int i=1; i<=d; i++) { scanf("%d",&a[i]); a[i]%=mod; } for (int i=1; i<=d; i++) { scanf("%d",&f[i]); f[i]%=mod; } if (n<=d) { printf("%d\n",f[n]); continue; } memset(A.mat, 0, sizeof(A.mat)); for (int i=2; i<=d; i++) { A.mat[i-1][i]=1; } for (int i=1; i<=d; i++) { A.mat[d][i]=a[d-i+1]; } A=qui(A, n-1); ll ans=0; for (int i=1; i<=d; i++) { ans+=f[i]*A.mat[1][i]; ans%=mod; } cout<<ans<<endl; } return 0;}
0 0
- 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 ( 矩阵快速幂 )
- UVa 10870 Recurrences (矩阵快速幂)
- Uva 10870 Recurrences 解题报告(矩阵快速幂)
- uva 10870 Recurrences(数学:矩阵快速幂)
- UVA 10870 Recurrences(构造矩阵和快速幂)
- 【矩阵快速幂】Recurrences UVA
- 递推关系( Recurrences, UVa 10870)(矩阵快速幂)
- uva 10870 - Recurrences(矩阵乘法)
- 苏嵌3 16.11.1
- 慕课网-十天精通CSS3-CSS3中的变形与动画(上)
- 守护进程
- ext4 学习笔记(三) Ext.window.Window(白鹤翔第一季)
- 【Lightoj 1414 - February 29 】
- UVA - 10870 Recurrences (矩阵快速幂)
- POJ-3281 Dining(最大流)
- dnotify监控文件行为
- HDU-1598-find the most comfortable road
- mac关于.bash_profile环境变量配置的问题
- 简单的停车场程序
- 关于进程虚拟地址为什么是4G的讨论
- 作用域(基础篇)
- uboot源码分析