51nod 1113 矩阵快速幂

来源:互联网 发布:知乎永久禁言怎么解除 编辑:程序博客网 时间:2024/06/09 17:09

最简单的四级题,上模板。

#include <iostream>#include <vector>using namespace std;typedef long long ll;typedef vector<ll> vec;typedef vector<vec> mat;const ll mod = 1e9+7;mat mul(mat& A, mat &B){    mat C(A.size(),vec(B[0].size()));    for(int i = 0; i < A.size(); ++i)        for(int k = 0; k < B.size(); ++k)            for(int j = 0; j < B[0].size(); ++j)                C[i][j] = (C[i][j]+A[i][k]*B[k][j])%mod;    return C;}mat pow(mat A, ll n){    mat B(A.size(),vec(A.size()));    for(int i = 0; i < A.size(); ++i)        B[i][i] = 1;    while(n > 0)    {        if(n&1) B = mul(B,A);        A = mul(A,A);        n >>= 1;    }    return B;}void solve(ll n, ll m){    mat A(n,vec(n));    for(int i = 0; i < n; ++i)    {        for(int j = 0; j < n; ++j)            cin >> A[i][j];    }    A = pow(A,m);    for(int i = 0; i < n; ++i)    {        for(int j = 0; j < n; ++j)            cout << A[i][j] << " ";        cout << endl;    }}int main(){    ios::sync_with_stdio(false);    ll n,m;    cin >> n >> m;    solve(n,m);    return 0;}
原创粉丝点击