社区讨论

分治做法RE求条

P10502Matrix Power Series参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mk16l0xz
此快照首次捕获于
2026/01/05 21:13
上个月
此快照最后确认于
2026/01/09 13:50
上个月
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct matrix{
    ll n,m,mod;
    ll a[30][30];
    matrix(const ll &A=0,const ll &B=0,const ll &C=0){
        n=A,m=B,mod=C;
        memset(a,0,sizeof(a));
    }
    inline void resize(const ll &n,const ll &m,const ll &mod){
        this->n=n,this->m=m,this->mod=mod;
        memset(this->a,0,sizeof(this->a));
        return;
    }
    inline void unit(const ll &n,const ll &mod){
        resize(n,n,mod);
        for(ll i=0;i<n;i++) this->a[i][i]=1;
        return;
    }
    inline matrix operator+(const matrix &oth)const{
        matrix res(this->n,this->m,mod);
        for(ll i=0;i<res.n;i++) for(ll j=0;j<res.m;j++) res.a[i][j]=(this->a[i][j]+oth.a[i][j])%mod;
        return res;
    }
    inline matrix &operator+=(const matrix &oth){return *this=*this+oth;}
    inline matrix operator*(const matrix &oth)const{
        matrix res(this->n,oth.m,mod);
        for(ll i=0;i<res.n;i++) for(ll j=0;j<res.m;j++) for(ll k=0;k<this->m;k++) res.a[i][j]=(res.a[i][j]+this->a[i][k]*oth.a[k][j]%mod)%mod;
        return res;
    }
    inline matrix &operator*=(const matrix &oth){return *this=*this*oth;}
    inline matrix qpow(ll b){
        matrix res,a=*this;
        res.unit(this->n,mod);
        while(b){
            if(b&1) res*=a;
            a*=a;
            b>>=1;
        }
        return res;
    }
};
ll n,m,k;
matrix a,ans;
inline matrix calc(const ll &n){
    if(n<=0) return matrix(n,n,m);
    if(n==1) return a;
    matrix u,res;
    u.unit(n,m);
    res=(a.qpow(n>>1)+u)*calc(n>>1);
    if(n&1) res+=a.qpow(n);
    return res;
}
int main(){
    cin>>n>>k>>m;
    a.resize(n,n,m);
    for(ll i=0;i<n;i++) for(ll j=0;j<n;j++) cin>>a.a[i][j];
    ans=calc(k);
    for(ll i=0;i<n;i++){
        for(ll j=0;j<n;j++) cout<<ans.a[i][j]<<' ';
        cout<<'\n';
    }
    return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...