zoukankan      html  css  js  c++  java
  • HDU 4686 Arc of Dream 矩阵快速幂

    输入的数据会大于mod,当n=0时输出0.

    #include<iostream>
    #include<vector>
    #include<queue>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    typedef long long ll;
    
    const ll mod = 1000000007;
    struct Matrix
    {
        ll da[5][5];
        Matrix (){memset(da,0,sizeof(da));}
        Matrix operator *(const Matrix &a)
        {
            Matrix res;
            for(int i=0;i<5;i++)
            {
                for(int j=0;j<5;j++)
                {
                    res.da[i][j]=0;
                    for(int k=0;k<5;k++)
                        res.da[i][j]=(res.da[i][j]+da[i][k]*a.da[k][j])%mod;
                }
            }
            return res;
        }
    }base,I;
    
    Matrix f(ll n)
    {
        if(n==0)return I;
        if(n%2==0)
        {
            Matrix res=f(n/2);
            return res*res;
        }else
        {
            Matrix res=f(n/2);
            return res*res*base;
        }
    }
    ll n,AX,AY,BX,BY,A0,B0;
    int main()
    {
        while(scanf("%I64d",&n)!=EOF)
        {
            scanf("%I64d%I64d%I64d%I64d%I64d%I64d",&A0,&AX,&AY,&B0,&BX,&BY);
            if(n==0){printf("0
    ");continue;}
            base.da[0][0]=AX*BX%mod;
            base.da[0][1]=AX*BY%mod;
            base.da[0][2]=BX*AY%mod;
            base.da[0][3]=AY*BY%mod;
            base.da[0][4]=A0*B0%mod;
            base.da[1][1]=AX%mod;
            base.da[1][3]=AY%mod;
            base.da[1][4]=A0%mod;
            base.da[2][2]=BX%mod;
            base.da[2][3]=BY%mod;
            base.da[2][4]=B0%mod;
            base.da[3][3]=base.da[4][4]=base.da[3][4]=1;
            for(int i=0;i<5;i++)
                I.da[i][i]=1;
            Matrix res=f(n-1);
            printf("%I64d
    ",((((res.da[0][0]*A0)%mod)*B0)%mod+res.da[0][1]*A0+res.da[0][2]*B0+res.da[0][3]+res.da[0][4])%mod);
        }
        return 0;
    }
    View Code

  • 相关阅读:
    Linux命令之_Cut(转)
    Use “error_messages” in Rails 3.2? (raises “undefined method” error)
    ruby错误
    Linux SvN操作
    Linux 安装SVN服务器 (转)
    删除 vim 命令
    vscode 配置java开发
    java json
    svn
    采样率和比特率
  • 原文地址:https://www.cnblogs.com/BMan/p/3380441.html
Copyright © 2011-2022 走看看