博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题目1081:递推数列 (矩阵快速幂解递推式)
阅读量:6269 次
发布时间:2019-06-22

本文共 1499 字,大约阅读时间需要 4 分钟。

题目1081:递推数列

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:5885

解决:800

题目描述:

给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q。这里n >= 2。 求第k个数对10000的模。

输入:

输入包括5个整数:a0、a1、p、q、k。

输出:

第k个数a(k)对10000的模。

样例输入:
20 1 1 14 5
样例输出:
8359
来源:
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 12 using namespace std;13 14 typedef long long ll;15 16 const ll mod = 10000;17 18 19 struct Matrix20 {21 ll mat[2][2];22 Matrix()23 {24 memset(mat,0,sizeof(mat));25 }26 Matrix operator *(const Matrix A) const27 {28 Matrix ret;29 for(int i=0;i<2;i++)30 {31 for(int j=0;j<2;j++)32 {33 for(int k=0;k<2;k++)34 ret.mat[i][j] = (ret.mat[i][j]+(mat[i][k]*A.mat[k][j])%mod)%mod;35 }36 }37 return ret;38 }39 };40 41 Matrix quickMul(Matrix x,int k)42 {43 Matrix ret;44 for(int i=0;i<2;i++)45 ret.mat[i][i] = 1;46 while(k>0)47 {48 if(k&1) ret=ret*x;49 k>>=1;50 x=x*x;51 }52 return ret;53 }54 55 int main()56 {57 ll a0,a1,p,q,k;58 while(~scanf("%lld%lld%lld%lld%lld",&a0,&a1,&p,&q,&k))59 {60 Matrix st;61 st.mat[0][0] = p,st.mat[0][1] = q;62 st.mat[1][0] = 1,st.mat[1][1] = 0;63 Matrix a = quickMul(st,k);64 Matrix b;65 b.mat[0][0] = a1;66 b.mat[1][0] = a0;67 a = a*b;68 printf("%lld\n",a.mat[1][0]%mod);69 }70 return 0;71 }
View Code

 

转载于:https://www.cnblogs.com/hadis-yuki/p/4394422.html

你可能感兴趣的文章
函数连续性与可导性
查看>>
linux下libevent安装
查看>>
用ip来获得用户所在地区信息
查看>>
卡尔曼滤波
查看>>
linux下面覆盖文件,如何实现直接覆盖,不提示
查看>>
CSS3阴影 box-shadow的使用和技巧总结
查看>>
Linux下高cpu解决方案
查看>>
SQL事务用法begin tran,commit tran和rollback tran的用法
查看>>
centos7 crontab笔记
查看>>
.Net AppDomain.CurrentDomain.AppendPrivatePath(@"Libs");
查看>>
【Unity3D基础教程】给初学者看的Unity教程(零):如何学习Unity3D
查看>>
Android Mina框架的学习笔记
查看>>
合并两个排序的链表
查看>>
rtf格式的一些说明,转载的
查看>>
REST Security with JWT using Java and Spring Security
查看>>
echarts学习总结(二):一个页面存在多个echarts图形,图形自适应窗口大小
查看>>
IIS7显示ASP的详细错误信息到浏览器
查看>>
使用fiddler对手机APP进行抓包
查看>>
exit和_exit的区别
查看>>
Javascript、Jquery获取浏览器和屏幕各种高度宽度(单位都为px)
查看>>