51nod 1113矩阵快速幂

来源:互联网 发布:云购cms getshell 编辑:程序博客网 时间:2024/05/19 01:13

就是写模板。

矩阵就是输入数据然后开平方

代码如下:

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;#define N 110#define MOD 1000000007#define mod(x) x%MODint n;struct rng{    long long int m[N][N];}a,un;rng operator *(rng a,rng b){        int i,j,k;        rng res;        long long int x;        for(i=0;i<n;i++)           for(j=0;j<n;j++){           x=0;           for(k=0;k<n;k++){            x+=mod(a.m[i][k]*b.m[k][j]);           }           res.m[i][j]=mod(x);        }    return res;}void init(){    int i;    for(i=0;i<110;i++)    {        un.m[i][i]=1;    }    return ;}rng Pow(rng a,long long int m){    rng res=un;    while(m){        if(m&1)            res=res*a;            m>>=1;            a=a*a;    }    return res;}int main(){    int i,j;    long long int m;    cin>>n>>m;    init();    for(i=0;i<n;i++)         for(j=0;j<n;j++)         cin>>a.m[i][j];    a=Pow(a,m);    for(i=0;i<n;i++)     for(j=0;j<n;j++){     if(j+1==n){        cout<<a.m[i][j]<<endl;     }     else {        cout<<a.m[i][j]<<" ";     }    }    return 0;}


0 0
原创粉丝点击