hdu 1757 A Simple Math Problem(矩阵连乘)

网友投稿 577 2022-08-27

hdu 1757 A Simple Math Problem(矩阵连乘)

hdu 1757 A Simple Math Problem(矩阵连乘)

题意:​​f[11]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)*(f[10],9,8,7,6,5,4,3,2,1)' f[n]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)*(f[n-1],f[n-2],f[n-3],f[n-4],f[n-5],f[n-6],f[n-7],f[n-8],f[n-9],f[n-10])'  让我们填完左边和右边的f系列对应完整看看会发生什么:

递推式找到了,最后确定原始的f系列值:

9,8,7,6,5,4,3,2,1,0

接下来写出相应的代码即可:

#include #includeusing namespace std;int k,m;struct matrix{ int q[10][10];};matrix I;matrix A;matrix multi(matrix a,matrix b){ matrix c={0}; for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ for(int k=0;k<10;k++){ c.q[i][j]+=(a.q[i][k]%m*(b.q[k][j]%m))%m; } } } return c;}matrix power(matrix a,int po){ matrix c=I; while(po){ if(po&1){ po--; c=multi(c,a); } po>>=1; a=multi(a,a); } return c;}int main(){ //freopen("cin.txt","r",stdin); int i,j; for(i=0;i<10;i++){ for(j=0;j<10;j++){ if(i==j)I.q[i][j]=1; else I.q[i][j]=0; } } for(i=1;i<10;i++){ A.q[i][i-1]=1; } while(cin>>k>>m){ for(i=0;i<10;i++){ scanf("%d",&A.q[0][i]); } if(k>9){ matrix rem=power(A,k-9); int ans=0; for(j=0;j<10;j++){ ans+=(9-j)*rem.q[0][j]%m; } printf("%d\n",ans%m); } else printf("%d\n",k%m); } return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:素因子分解 (快速筛法&&试除法)
下一篇:Asp.net 2.0 Session 丢失的几种情况
相关文章

 发表评论

暂时没有评论,来抢沙发吧~