1 条题解
-
0
C++ :
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; int n; const int mod=1000000007; struct Mat{ long long m[6][6]; }; Mat mut(const Mat& a, const Mat& b) { Mat c; for(int i=0;i<6;i++) { for(int j=0;j<6;j++) { c.m[i][j]=0; for(int k=0;k<6;k++) { c.m[i][j]+=(a.m[i][k]*b.m[k][j])%mod; c.m[i][j]%=mod; } } } return c; } Mat power(Mat a,long long p) { Mat ans; memset(ans.m,0,sizeof(ans.m)); for(int i=0;i<6;i++) { ans.m[i][i]=1; } while(p) { if(p%2==0) { a=mut(a,a); p/=2; } else { ans=mut(ans,a); p--; } } return ans; } int main() { // freopen( "E.txt", "r", stdin ); // freopen( "_E.txt", "w", stdout ); while(cin>>n) { if(n==0) return 0; if(n==1) { cout<<1<<endl; } else if(n==2) { cout<<2<<endl; } else { Mat ans; memset(ans.m,0,sizeof(ans.m)); ans.m[0][0]=ans.m[0][4]=ans.m[1][0]=ans.m[1][3]=ans.m[2][0]=ans.m[2][2]=1; ans.m[3][0]=ans.m[3][1]=ans.m[4][0]=ans.m[5][0]=ans.m[5][4]=ans.m[5][5]=1; ans.m[0][1]=ans.m[0][3]=ans.m[5][1]=ans.m[5][3]=4; ans.m[1][1]=ans.m[1][2]=3; ans.m[2][1]=2; ans.m[0][2]=ans.m[5][2]=6; ans=power(ans,n-2); long long res = 0; for(int i=0;i<5;i++) res+=ans.m[5][i]; res+=ans.m[5][5]*2; cout<<res%mod<<endl; } } return 0; }
- 1
信息
- ID
- 3075
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者