1 条题解

  • 1
    @ 2022-7-21 21:33:28
    #include<cstdio>
    #include<cstring>
    const int mod=1e6+3;
    struct mat{
        int c[30][30];
        void clear(){memset(c,0,sizeof(c));}
        mat operator *(const mat &o)const{
            mat r;
            r.clear();
            for(int i=1;i<=29;i++)
            for(int k=1;k<=29;k++)
            for(int j=1;j<=29;j++)
            if(c[i][k]&&o.c[k][j])
            r.c[i][j]=(r.c[i][j]+1ll*c[i][k]*o.c[k][j])%mod;
            return r;
        }
    }f,g;
    int ksm(int u,int v){
    	int res=1;
    	for(;v;v>>=1,u=1ll*u*u%mod)
    	if(v&1)res=1ll*res*u%mod;
    	return res;
    }
    typedef long long LL;
    LL n;
    int main(){
    	scanf("%lld",&n);
    	f.c[1][9]=1;//f[0]=1
    	for(int i=1;i<=8;i++)g.c[i+1][i]=1;
    	for(int i=1;i<=9;i++)g.c[i][9]=1;
    	for(int i=10;i<=17;i++)g.c[i+1][i]=1;
    	for(int i=1;i<=9;i++)g.c[i][18]=10-i;
    	for(int i=10;i<=18;i++)g.c[i][18]=10;
    	for(int i=19;i<=26;i++)g.c[i+1][i]=1;
    	for(int i=1;i<=9;i++)g.c[i][27]=(10-i)*(10-i);
    	for(int i=10;i<=18;i++)g.c[i][27]=(19-i)*20;
    	for(int i=19;i<=27;i++)g.c[i][27]=100;
    	g.c[18][28]=g.c[28][28]=1;
    	g.c[27][29]=g.c[29][29]=1;
        //我这里求的是n-1的\sum,所以n要加1
    	for(++n;n;n>>=1,g=g*g)
    	if(n&1)f=f*g;
    	printf("%lld\n",1ll*(1ll*f.c[1][28]*f.c[1][28]-f.c[1][29]+mod)%mod*ksm(2,mod-2)%mod);
    }
    
    • 1

    信息

    ID
    4184
    时间
    1000ms
    内存
    250MiB
    难度
    6
    标签
    递交数
    2
    已通过
    2
    上传者