HDU 2256 Problem of Precision (矩阵快速幂+ 化简 +向下取整)
Problem of Precision
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1565 Accepted Submission(s): 951
Problem Description
Input
The first line of input gives the number of cases, T. T test cases follow, each on a separate line. Each test case contains one positive integer n. (1 <= n <= 10^9)
Output
For each input case, you should output the answer in one line.
Sample Input
3
1
2
5
Sample Output
9
97
841
代码如下:
#include <iostream> #include <cstring> #include <queue> #include <algorithm> #include <stdio.h> #include <cmath> #include <string> #include <stack> typedef long long ll; const int MOD=1024; const int N =20; const int MAXN=2; using namespace std; struct Matrix{ ll arr[N][N]; void init() { memset(arr,0,sizeof(arr)); for(int i=0;i<MAXN;i++) arr[i][i]=1;//初始化 } void iinit() { memset(arr,0,sizeof(arr)); arr[0][0]=arr[1][1]=5; arr[0][1]=12; arr[1][0]=2; } }A; Matrix mul(Matrix X,Matrix Y)// 矩阵乘法 { Matrix ans; for(int i=0;i<MAXN;i++) for(int j=0;j<MAXN;j++){ ans.arr[i][j]=0; for(int k=0;k<MAXN;k++){ ans.arr[i][j]+=X.arr[i][k]*Y.arr[k][j]; ans.arr[i][j]%=MOD; } } return ans; } Matrix Q_pow(Matrix B,int n)// 矩阵快速幂 { Matrix ans; ans.init(); while(n) { if(n&1) ans=mul(ans,B); n>>=1; B=mul(B,B); } return ans; } Matrix Add(Matrix a,Matrix b) //(a+b)%mod 矩阵加法 { int i,j,k; Matrix ans; for(i=0;i<MAXN;i++) for(j=0;j<MAXN;j++) { ans.arr[i][j]=a.arr[i][j]+b.arr[i][j]; ans.arr[i][j]%=MOD; } return ans; } Matrix Sum(Matrix a,int n)// 矩阵和 { int m; Matrix ans,pre; if(n==1) return ans; m=n/2; pre=Sum(a,m); ans=Add(pre,mul(pre,Q_pow(a,m))); if(n&1) ans=Add(ans,Q_pow(a,n)); return ans; } int main() { int T; cin>>T; int n; while(T--) { scanf("%d",&n); Matrix ans; ans.iinit(); if(n==1) { printf("9\n"); continue; } ans=Q_pow(ans,n-1); ll res=0; //cout<<ans.arr[0][0]<<" "<<ans.arr[0][1]<<" "<<endl; res=(ans.arr[0][0]*5+ans.arr[0][1]*2)%MOD; printf("%lld\n",(2*res-1)%MOD); } return 0; }
岂曰无衣?与子同袍。王于兴师,修我戈矛。与子同仇!
岂曰无衣?与子同泽。王于兴师,修我矛戟。与子偕作!
岂曰无衣?与子同裳。王于兴师,修我甲兵。与子偕行!