HDU 1757 矩阵快速幂模版
来源:互联网 发布:考试宝典怎么样知乎 编辑:程序博客网 时间:2024/06/05 17:14
矩阵快速幂模版题,注意k<10的初值即可。
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>const int N=10;int k,mod,a[10];using namespace std;struct mat{ int m[N][N]; mat() {} mat unit(){ for(int i=0;i<N;i++) for(int j=0;j<N;j++) m[i][j]=i==j?1:0; }};mat t;mat operator * (mat a,mat b){ mat res; for(int i=0;i<N;i++) for(int j=0;j<N;j++){ res.m[i][j]=0; for(int k=0;k<N;k++) res.m[i][j]+=((a.m[i][k]%mod)*(b.m[k][j]%mod))%mod; } return res;}mat operator ^ (mat res,int n){ res.unit(); while(n>=1){ if(n&1) res=res*t; n=n>>1; t=t*t; } return res;}void init(){ for(int i=0;i<N;i++) t.m[i][0]=a[i]; for(int i=0;i+1<N;i++) t.m[i][i+1]=1;} int main(){ //freopen("input.txt","r",stdin); while(~scanf("%d%d",&k,&mod)){ memset(t.m,0,sizeof(t.m)); mat A; int final=0; for(int i=0;i<10;i++) scanf("%d,",&a[i]); if(k<10) printf("%d\n",k%mod); else{ init(); A=t^(k-9); /*for(int i=0;i<N;i++){ for(int j=0;j<N;j++) printf("%d ",A.m[i][j]); cout<<endl; }*/ for(int i=0;i<=9;i++) final+=(A.m[i][0]*(9-i))%mod; final%=mod; printf("%d\n",final); } } return 0;}
0 0
- HDU 1757 矩阵快速幂模版
- 矩阵快速幂模版
- 模版--矩阵快速幂
- 矩阵快速幂模版
- 矩阵快速幂模版
- 矩阵快速幂 模版
- 矩阵快速幂模版
- 【矩阵快速幂】hdu 1757
- hdu 1757 矩阵快速幂
- hdu 1757(矩阵快速幂)
- HDU 1757 矩阵快速幂
- hdu 1757(快速矩阵幂)
- HDU 1757 矩阵快速幂
- 模版—矩阵连乘快速幂
- NYOJ 148 矩阵快速幂模版
- 51nod 矩阵快速幂模版题
- poj 3734 <矩阵快速幂模版>
- HDU——1005Number Sequence(模版题 二维矩阵快速幂+操作符重载)
- html js 定制进度条 (二)
- 2.4.2节练习
- 《GeekBand》C++设计模式02
- 修改host,上github
- U-Boot Environment Variables
- HDU 1757 矩阵快速幂模版
- Linux分区
- Python生成随机数
- C#之WinForm基础 设置文件对话框只能看到所有类型的文件
- WSAAsyncSelect模型
- 设计模式——桥接模式(C++)
- BNU20410 UVA11992 线段树区间更新
- Base64编码出现换行符
- C#之WinForm基础 设置文件对话框只能看到一种指定类型的文件