码迷,mamicode.com
首页 > 其他好文 > 详细

poj3070 单位矩阵(转移矩阵构造)+矩阵快速幂

时间:2019-03-13 19:34:16      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:memcpy   names   poj   cin   cstring   void   space   using   stream   

太妙了。。通过矩阵乘法来加速递推

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define mod 10000
int n;
void mul(int f[],int a[2][2]){//一维数组和矩阵相乘 
    int c[2]={};
    for(int i=0;i<2;i++)
        for(int j=0;j<2;j++)
            c[j]=(c[j]+(long long)f[i]*a[i][j])%mod;
    memcpy(f,c,sizeof c);
}
void mulself(int a[2][2]){//矩阵自乘 
    int c[2][2]={};
    for(int i=0;i<2;i++)
        for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
                c[i][j]=(c[i][j]+(long long)a[i][k]*a[k][j])%mod; 
    memcpy(a,c,sizeof c);
}

int main(){
    while(cin>>n && n>=0){
        int f[2]={0,1},a[2][2]={{0,1},{1,1}};
        while(n){
            if(n%2)mul(f,a);
            mulself(a);
            n>>=1;
        }
        cout<<f[0]<<endl;
    }    
}
/*
1 1 2 3 5 8 13 21 34
*/

 

poj3070 单位矩阵(转移矩阵构造)+矩阵快速幂

标签:memcpy   names   poj   cin   cstring   void   space   using   stream   

原文地址:https://www.cnblogs.com/zsben991126/p/10525509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!