• NOI2013 矩阵游戏


    题目链接:戳我

    [f[n][m]=a*f[n][m-1]+b ]

    [=a^{m-1}*f[n][1]+b+ab+...+a^{m-2}b ]

    [=a^{m-1}*(c*f[i-1][m]+d)+b+ab+...+a^{m-2}b ]

    [=a^{m-1}*c*f[i-1][m]+a^{m-1}*d+b+ab+...+a^{m-2}b ]

    (a^{m-1}*c)(x)
    (b+ab+...+a^{m-2}b)(p)
    (a^{m-1}*d+p)(y)
    (y+xy+...+x^{n-2}y)为q

    (n,m)是对(mod-1)取模的次数项(n-1),(m-1)
    (nn,mm)是对(mod)取模的系数项(n-1),(m-1)

    [f[n][m]=(x^n)(a^m)+q ]

    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define MAXN 100010
    #define MOD 1000000007
    using namespace std;
    int n,m,a,b,c,d,nn,mm;
    long long p,q,x,y;
    inline int fpow(int x,int y,int mod)
    {
        int cur_ans=1;
        while(y)
        {
        if(y&1) cur_ans=1ll*x*cur_ans%mod;
        x=1ll*x*x%mod;
        y>>=1;
        }
        return cur_ans%mod;
    }
    inline int inv(int x){return fpow(x,MOD-2,MOD);}
    int main()
    {
        #ifndef ONLINE_JUDGE
        freopen("ce.in","r",stdin);
        #endif
        int f=1;
        char ch;
        while(ch<'0'||ch>'9'){if(ch==-1)f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9')
        {
            n=(10ll*n+ch-'0')%(MOD-1);
            nn=(10ll*nn+ch-'0')%MOD;
            ch=getchar();
        }
        n=(n+MOD-2)%(MOD-1);//次数n-1
        nn=(nn+MOD-1)%MOD;//系数n-1
        while(ch<'0'||ch>'9'){if(ch==-1)f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9')
        {
            m=(10ll*m+ch-'0')%(MOD-1);
            mm=(10ll*mm+ch-'0')%MOD;
            ch=getchar();
        }
        m=(m+MOD-2)%(MOD-1);//次数m-1
        mm=(mm+MOD-1)%MOD;//系数m-1
        scanf("%d%d%d%d",&a,&b,&c,&d);
        int am=fpow(a,m,MOD);
        x=1ll*am*c%MOD;
        if(a==1) p=1ll*b*mm%MOD;
        else p=1ll*b*(1+MOD-am)%MOD*inv(1+MOD-a)%MOD;
        int xn=fpow(x,n,MOD);
        y=(1ll*am*d%MOD+p)%MOD;
        if(x==1) q=1ll*y*nn%MOD;
        else q=1ll*y*(1+MOD-xn)%MOD*inv(1+MOD-x)%MOD;
        printf("%lld
    ",(1ll*xn*(am+p)+q)%MOD);
        return 0;
    }
    
    
  • 相关阅读:
    会议记录
    周总结
    团队博客
    周总结
    移动端疫情展示
    代码规范
    阅读笔记2
    解决 import numpy as np ModuleNotFoundError: No module named 'numpy'错误
    周总结
    爬取最新疫情数据
  • 原文地址:https://www.cnblogs.com/fengxunling/p/10947461.html
Copyright © 2020-2023  润新知