Hdu 1757 A Simple Math Problem (matrix fast power)
A Simple Math ProblemTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission (s): 2512 Accepted Submission (s): 1461
Problem DescriptionLele now is thinking about a simple function f (x ).
If x <10 f (x) = x.
If x> = 10 f (x) = a0 * f (x-1) + a1 * f (X-2) + a2 * f (X-3) + ...... + A9 * f (X-10 );
And ai (0 <= I <= 9) can only be 0 or 1.
Now, I will give a0 ~ A9 and two positive integers k and m, and cocould you help Lele to caculate f (k) % m.
InputThe problem contains mutiple test cases. Please process to the end of file.
In each case, there will be two lines.
In the first line, there are two positive integers k and m. (k <2*10 ^ 9, m <10 ^ 5)
In the second line, there are ten integers represent a0 ~ A9.
OutputFor each case, output f (k) % m in one line.
Sample Input
10 99991 1 1 1 1 1 1 1 1 120 5001 0 1 0 1 0 1 0 1 0
Sample Output
45104
Authorlinle
Question and code:
#include
#include
#include
using namespace std;const int mod=1e9;struct mat{ __int64 t[10][10]; void set() { memset(t,0,sizeof(t)); }} a,b,c;mat multiple(mat a,mat b,int n,int p){ int i,j,k; mat temp; temp.set(); for(i=0; i
>=1; b=multiple(b,b,n,p); } return t;}void init(int a[]){ b.set(); for(int i=0;i<10;i++) { for(int j=0;j<10;j++) if(j==9) b.t[i][j]=a[i]; else if(i==j+1) b.t[i][j]=1; } /*for(int i=0;i<=9;i++) { for(int j=0;j<=9;j++) cout<
>k>>M) { for(int i=9;i>=0;i--) cin>>s[i]; if(k<10) { cout<