#include <iostream>
#include <cstdio>
using namespace std;
typedef __int64 LL;
struct M
{
int ma[10][10];
M(){memset(ma,0,sizeof(ma));}
void in()
{
memset(ma,0,sizeof(ma));
for(int i=0;i<10;i++)
scanf("%d",&ma[0][i]);
for(int i=1;i<10;i++)
ma[i][i-1] = 1;
}
};
M mul(M a,M b,int mod)
{
M temp;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
for(int k = 0;k<10;k++)
{
temp.ma[i][j] += a.ma[i][k]*b.ma[k][j];
temp.ma[i][j] %= mod;
}
return temp;
}
M mulmod(M a,int n,int mod)
{
if(n==1) return a;
M temp = mulmod(a,n/2,mod);
if(n%2)
return mul(mul(temp,temp,mod),a,mod);
else return mul(temp,temp,mod);
}
int ends(M a,int mod)
{
int sum = 0;
for(int i=9;i>=0;i--)
{
sum += a.ma[0][i]*(9-i);
sum %= mod;
}
return sum;
}
int main()
{
int k,m;
while(scanf("%d%d",&k,&m)!=EOF)
{
M xi;
xi.in();
if(k<10)
printf("%d\n",k%m);
else
{
xi = mulmod(xi,k-9,m);
printf("%d\n",ends(xi,m));
}
}
return 0;
}
hdu 1757
最新推荐文章于 2019-05-16 21:44:01 发布