只有最后一个点对,剩下WA求助
查看原帖
只有最后一个点对,剩下WA求助
457492
ysl_wf楼主2024/4/17 17:05

下载样例看的时候发现什么也没有输出...不知道为什么...

#include<bits/stdc++.h>
using namespace std;

typedef long long lt;
const lt N = 110, mod = 1e9 + 7;
lt l, n;

struct T{
    lt g[N][N];
    //Remember!!!
    T(){ memset(g, 0, sizeof(g)); }
}s, ans;

T operator * (const T &a, const T &b){
    T c;
    for(int k = 1; k <= l; k++){
        for(int i = 1; i <= l; i++){
            for(int j = 1; j <= l; j++){
                c.g[i][j] = (c.g[i][j] + a.g[i][k] * b.g[k][j] % mod) % mod;
            }
        }
    }
    return c;
}

T qp(T a, lt n){
    if(n == 1) return a;
    T b = qp(a, n/2);
    b = !n % 2 ? b * b : (b * b) * a;
    return b;
}

int main(){
//    freopen("P3390_1.in", "r", stdin);
//    freopen("6.out", "w", stdout);
    scanf("%lld%lld", &l, &n);
    for(int i = 1; i <= l; i++){
        for(int j = 1; j <= l; j++){
            scanf("%lld", &s.g[i][j]);
        }
    }
    for(int i = 1; i <= l; i++){
        ans.g[i][i] = 1;
    }
    if(n) ans = qp(s, n);
    for(int i = 1; i <= l; printf("\n"), i++)
        for(int j = 1; j <= l; j++)
            printf("%lld ", ans.g[i][j] % mod);
    return 0;
}


2024/4/17 17:05
加载中...