题意:给出矩阵的第0行(233,2333,23333,...)和第0列a1,a2,...an(n<=10,m<=10^9),给出式子: A[i][j] = A[i-1][j] + A[i][j-1],要求A[n][m]。
解题思路:建立12*12的矩阵:
#include
#include
#include
#include
using namespace std;
#define ll long long
#define mod 10000007
int n;
struct Matrix
{
ll x[12][12];
Matrix()
{
memset(x,0,sizeof x);
}
}a,t;
Matrix mul(Matrix c,Matrix d)
{
Matrix sum;
for(int i=0;i<=n+1;i++)
{
for(int j=0;j<=n+1;j++)
{
for(int k=0;k<=n+1;k++)
{
sum.x[i][j]+=c.x[i][k]*d.x[k][j];
sum.x[i][j]%=mod;
}
}
}
return sum;
}
Matrix mypow(Matrix l,int m)
{
Matrix sum;
for(int i=0;i<=n+1;i++)
sum.x[i][i]=1;
while(m)
{
if(m&1) sum=mul(sum,l);
m>>=1;
l=mul(l,l);
}
return sum;
}
int main()
{
int m;
while(~scanf("%d %d",&n,&m))
{
for(int i=1;i<=n;i++)
scanf("%lld",&a.x[i][0]);
if(m==0) {printf("%lld\n",a.x[n][0]);continue;}
Matrix k;
a.x[0][0]=23;
for(int i=0;i<=n;i++)
{
k.x[i][0]=10;k.x[i][n+1]=1;
for(int j=1;j