UVA10870-Recurrences
来源:互联网 发布:人工智能 机器人的区别 编辑:程序博客网 时间:2024/05/23 15:43
#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>using namespace std;#define ll long longll f[20],mod;struct Matrix{ ll v[20][20]; Matrix() { memset(v,0,sizeof v); }}m,k,t;Matrix mul(Matrix a,Matrix b,int d){ Matrix sum; for(int i=1; i<=d; i++) { for(int j=1; j<=d; j++) { for(int k=1; k<=d; k++) { sum.v[i][j]+=a.v[i][k]*b.v[k][j]; sum.v[i][j]%=mod; } } } return sum;}Matrix pow(Matrix a,int n,int d){ Matrix sum=k; while(n) { if(n&1) sum=mul(sum,a,d); n>>=1; a=mul(a,a,d); } return sum;}int main(){ int d,n; while(~scanf("%d %d %lld",&d,&n,&mod)) { if(!d&&!n&&!mod) break; for(int i=1;i<=d;i++) { scanf("%lld",&m.v[i][1]); m.v[i][1]%=mod; } for(int i=1;i<=d;i++) m.v[i][i+1]=1; for(int i=1;i<=d;i++) { scanf("%lld",&f[i]); f[i]%=mod; } if(n<=d) {printf("%lld\n",f[n]);continue;} for(int i=1;i<=d;i++) k.v[i][i]=1; t=pow(m,n-d,d); ll ans=0; for(int i=1;i<=d;i++) { ans+=t.v[i][1]*f[d+1-i]; ans%=mod; } printf("%lld\n",ans); } return 0;}
0 0
- [UVA10870] Recurrences
- UVA10870-Recurrences
- uva10870 Recurrences
- uva10870 Recurrences 矩阵快速幂
- uva10870 Recurrences矩阵快速幂
- UVA10870 Recurrences —— 矩阵快速幂
- UVa10870
- Recurrences
- Recurrence UVA10870
- UVA10870(Recurrents)
- Recurrences UVA
- Recurrences UVA
- 矩阵快速幂uva10870
- uva10870(矩阵快速幂)
- uva 10870 Recurrences
- Asymptotic Notation and Recurrences
- uva 10870 Recurrences
- Uva Recurrences 矩阵优化
- Centos Git1.7.1升级到Git2.2.1
- Linux基础教程:从源码安装软件
- java的异常和错误有什么区别。
- 【Retrofit 】Retrofit 基本使用教程
- Rxjava详解
- UVA10870-Recurrences
- 【Retrofit】Retrofit源码解析
- 100. Same Tree
- [Java]一、Java开发基本步骤
- Java(标准输入/输出流)
- c语言/c++编程 之 暗号传递
- 一、概述 EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间
- 背包九讲之二维成本背包
- dbcp 数据库连接池 出现 NoClassDefFoundError Exception