HDU 5015 233 Matrix(网络赛1009)
2014-09-14 19:30
561 查看
把第一行的233数列全部左移一位就可以推出一个递推矩阵来
比如输入的是
3 7
23 47 16
可以构造成
B[0][0]=233
B[1][0]=23
B[2][0]=47
B[3][0]=16
B[4][0]=3
递推矩阵A:
10 0 0 0 1
1 1 0 0 0
1 1 1 0 0
1 1 1 1 0
0 0 0 0 1
然后就是矩阵(A^m)*B第n项就是答案
我的代码
比如输入的是
3 7
23 47 16
可以构造成
B[0][0]=233
B[1][0]=23
B[2][0]=47
B[3][0]=16
B[4][0]=3
递推矩阵A:
10 0 0 0 1
1 1 0 0 0
1 1 1 0 0
1 1 1 1 0
0 0 0 0 1
然后就是矩阵(A^m)*B第n项就是答案
我的代码
#include<iostream> #include<sstream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<map> #include<time.h> #include<set> #include<string> #include<vector> #include<algorithm> using namespace std; #define inf 0x7fffffff #define lc l,m,index<<1 #define rc m+1,r,index<<1|1 #define max_n 100005 #define mod 10000007 #define FOR(i,s,t) for(int i=(s);i<=(t);++i) #define LL __int64 LL n,m; typedef vector<LL>vec; typedef vector<vec> mat; mat A(15,vec(15)),B(15,vec(15)),C(15,vec(15)); void init() { A[0][0]=10; for(int i=1;i<=n;i++) A[0][i]=0; A[0][n+1]=1; for(int i=1;i<=n;i++) { for(int j=0;j<=n+1;j++) { if(j<=i) A[i][j]=1; else A[i][j]=0; } } for(int i=0;i<=n;i++) A[n+1][i]=0; A[n+1][n+1]=1; } mat mul(mat &a,mat &b) { mat c(a.size(),vec(a.size())); for(int i=0;i<=n+1;i++) { for(int j=0;j<=n+1;j++) { // printf("af\n"); for(int k=0;k<a[0].size();k++) c[i][k]=(c[i][k]+a[i][j]*b[j][k])%mod; } } return c; } mat pow(mat a,LL K) { mat b(a.size(),vec(a.size())); for(int i=0;i<=n+1;i++) b[i][i]=1; while(K) { if(K&1) b=mul(b,a); a=mul(a,a); K>>=1; //printf("asfsa\n"); } return b; } int main() { while(~scanf("%I64d%I64d",&n,&m)) { B[0][0]=233; for(int i=1;i<=n;i++) scanf("%I64d",&B[i][0]); B[n+1][0]=3; init(); /* for(int i=0;i<=n+1;i++) { for(int j=0;j<=n+1;j++) printf("%I64d ",A[i][j]); printf("\n"); }*/ C=pow(A,m); LL ans=0; /* for(int i=0;i<=n+1;i++) { for(int j=0;j<=n+1;j++) printf("%I64d ",C[i][j]); printf("\n"); }*/ for(int i=0;i<=n+1;i++) ans=(ans+C [i]*B[i][0])%mod; printf("%I64d\n",ans); } return 0; }
相关文章推荐
- hdu 5015 233 Matrix(西安网络赛1009)【构造矩阵】
- HDU 5015 233 Matrix(网络赛1009) 矩阵快速幂
- hdu 5015 233 Matrix(西安网络赛 1009)
- hdu 5015 233 Matrix 2014年西安网络赛I题
- HDU 5015 233 Matrix(西安网络赛I题, 构造矩阵)
- HDU 5015 233 Matrix(西安网络赛I题)
- hdu 5015 233 Matrix(矩阵快速幂)
- hdu 5015 233 Matrix(构造矩阵)
- [矩阵快速幂] hdu 5015 233 Matrix
- Hdu 5015 233 Matrix (矩阵乘法)
- hdu 5015 Matrix 233 矩阵快速幂
- hdu 5015 233 Matrix 矩阵快速幂
- hdu 5015 233 Matrix(最快的搞法)
- hdu 5015 233 Matrix(矩阵快速幂)
- hdu 5015 233 Matrix 2014 ACM/ICPC Asia Regional Xi'an Online 矩阵快速幂
- 【HDU】5015 233 Matrix 矩阵快速幂
- HDU - 5015 233 Matrix (矩阵构造)
- HDU 5015 233 Matrix (矩阵快速幂)
- HDU 5015 233 Matrix
- HDU 5015 233 Matrix 矩阵递推