标签:des style blog http color io os java ar
10 9999 1 1 1 1 1 1 1 1 1 1 20 500 1 0 1 0 1 0 1 0 1 0
45 104
#include"iostream"
#include"stdio.h"
#include"string.h"
#include"algorithm"
#include"queue"
#include"vector"
using namespace std;
#define N 10
#define LL __int64
int M,f[N];
struct Mat
{
LL mat[N][N];
};
Mat operator *(Mat a,Mat b)
{
int i,j,k;
Mat c;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
c.mat[i][j]=0;
for(k=0;k<N;k++)
{
c.mat[i][j]+=(a.mat[i][k]*b.mat[k][j])%M;
}
}
}
return c;
}
int fun(Mat &a,int k)
{
int i;
Mat ans;
memset(ans.mat,0,sizeof(ans.mat));
k-=9;
for(i=0;i<N;i++)
ans.mat[i][i]=1;
for(i=1;i<N;i++)
a.mat[i][i-1]=1;
while(k)
{
if(k&1)
ans=ans*a;
k>>=1;
a=a*a;
}
LL s=0;
for(i=0;i<N;i++)
{
s+=ans.mat[0][i]*f[N-i-1]%M;
s%=M;
}
return s;
}
int main()
{
int k,i;
Mat a;
while(scanf("%d%d",&k,&M)!=-1)
{
memset(a.mat,0,sizeof(a.mat));
for(i=0;i<N;i++)
{
scanf("%I64d",&a.mat[0][i]);
f[i]=i;
}
if(k<N)
printf("%d\n",i%M);
else
printf("%d\n",fun(a,k));
}
return 0;
}
hdu 1757 A Simple Math Problem(矩阵快速幂)
标签:des style blog http color io os java ar
原文地址:http://blog.csdn.net/u011721440/article/details/39347817