xdoj-1109

来源:互联网 发布:mysql select 语句 编辑:程序博客网 时间:2024/05/22 10:44
#include<cstdio>#include<cstring>const int mod=10007;struct Mat{    int mat[3][3];};Mat Mult(Mat a,Mat b){    Mat c;    memset(c.mat,0,sizeof(c.mat));    for(int i=0;i<3;i++){        for(int j=0;j<3;j++){            for(int k=0;k<3;k++){                c.mat[i][j]+=a.mat[i][k]*b.mat[k][j];                c.mat[i][j]%=mod;            }        }    }    return c;}Mat QMult(Mat a,int b){    Mat c;    for(int i=0;i<3;i++)        for(int j=0;j<3;j++)            c.mat[i][j]=i==j;    while(b){        if(b&1)            c=Mult(c,a);        a=Mult(a,a);        b>>=1;    }    return c;}int main(){    int n;    while(~scanf("%d",&n))    {        Mat c;        memset(c.mat,0,sizeof(c.mat));        c.mat[0][0]=c.mat[0][1]=c.mat[0][2]=c.mat[1][0]=c.mat[2][1]=1;        if(n==1)    puts("1");        else if(n==2)   puts("2");        else if(n==3)   puts("4");        else         {            c=QMult(c,n-3);            printf("%d\n",(c.mat[0][0]*4+c.mat[0][1]*2+c.mat[0][2])%mod);        }    }}
0 0
原创粉丝点击