zoukankan      html  css  js  c++  java
  • hihocoder 1151 骨牌覆盖问题 二 (矩阵快速幂)

    思路见hihocoder,用的kuangbin的矩阵快速幂,一次AC,6的一笔。

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <string>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <set>
    #include <map>
    
    #define FOR(i,s,t) for(int i = (s) ; i <= (t) ; ++i )
    
    #define lchild o<<1
    #define rchild o<<1|1
    
    typedef long long ll;
    typedef unsigned long long ull;
    
    using namespace std;
    
    const int inf=0x3f3f3f3f;
    const ll INF=0x3f3f3f3f3f3f3f3f;
    const int maxn=1e6+5;
    
    int n;
    ll dp[2][8];
    
    struct Matrix
    {
        long long mat[8][8];
    };
    Matrix mul(Matrix a,Matrix b)
    {
        Matrix ret;
        for(int i=0;i<8;i++)
            for(int j=0;j<8;j++)
            {
                ret.mat[i][j]=0;
                for(int k=0;k<8;k++)
                {
                    ret.mat[i][j]+=a.mat[i][k]*b.mat[k][j];
                    ret.mat[i][j]%=(12357);
                }
            }
        return ret;
    }
    Matrix pow_M(Matrix a,int n)
    {
        Matrix ret;
        memset(ret.mat,0,sizeof(ret.mat));
        for(int i=0;i<8;++i)ret.mat[i][i]=1;
        Matrix temp=a;
        while(n)
        {
            if(n&1)ret=mul(ret,temp);
            temp=mul(temp,temp);
            n>>=1;
        }
        return ret;
    }
    
    
    int main()
    {
        //freopen("in.txt","r",stdin);
    
        Matrix a;
        memset(a.mat,0,sizeof a.mat);
        for(int i=0;i<8;++i)a.mat[i][7-i]=1;
        a.mat[3][7]=1;
        a.mat[6][7]=1;
        a.mat[7][3]=1;
        a.mat[7][6]=1;
    
        ll b[8]={0,0,0,0,0,0,0,1};
    
        while(cin>>n)
        {
            Matrix tmp = pow_M(a,n);
    
            ll ans = 0;
    
            for(int i=0;i<8;++i)
            {
                ans += b[i]*tmp.mat[i][7];
    
            }
    
            cout<<ans<<endl;
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    输入输出流
    servlet的生命周期
    谈谈Spring Ioc的理解
    Spring boot实例
    Spring boot快速入门
    Spring中JdbcTemplate的基础用法
    JVM 内存区域
    Spring中JdbcTemplate的基础用法
    Spring的自学之路之入门
    codves 1044 拦截导弹
  • 原文地址:https://www.cnblogs.com/bruce27/p/5064152.html
Copyright © 2011-2022 走看看