RE求调
查看原帖
RE求调
531709
LittleAcbg楼主2024/3/6 19:18

本地测试时,发现在 main 函数开头加上 cout << "inside main()" << endl; 无任何输出,而删除 main 主体部分,只保留 cin >> n >> k; return 0; 则可以正常运行。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1009;
const ll mod = 1e9+7;
class Matrix {
public:
    int r,c;
    ll data[N][N];
    Matrix(int _r, int _c)
    {
        r = _r; c = _c;
        memset(data, 0, sizeof data);
    }
    void reset(int _r, int _c)
    {
        r = _r; c = _c;
        memset(data, 0, sizeof data);
    }
    void debug()
    {
        cout << r << ' ' << c << endl;
        for (int i = 0; i < r; ++i,cout << endl)
            for (int j = 0; j < c; ++j)
                cout << data[i][j] << ' ';
    }
    Matrix operator = (Matrix m)
    {
        r = m.r; c = m.c;
        memset(data, 0, sizeof data);
        for (int i = 0; i < r; ++i)
            for (int j = 0; j < c; ++j)
                data[i][j] = m.data[i][j];
        return *this;
    }
    Matrix operator + (Matrix m)
    {
        Matrix ret(r, c);
        if (r != m.r || c != m.c) return ret;
        for (int i = 0; i < r; ++i)
            for (int j = 0; j < c; ++j)
                ret.data[i][j] = (data[i][j] + m.data[i][j]) % mod;
        return ret;
    }
    Matrix operator += (Matrix m)
    {
        if (r != m.r || c != m.c) return *this;
        for (int i = 0; i < r; ++i)
            for (int j = 0; j < c; ++j)
                data[i][j] = (data[i][j] + m.data[i][j]) % mod;
        return *this;
    }
    Matrix operator * (Matrix m)
    {
        Matrix ret(r, m.c);
        if (c != m.r) return ret;
        for (int i = 0; i < r; ++i)
            for (int j = 0; j < m.c; ++j)
                for (int k = 0; k < c; ++k)
                    ret.data[i][j] = (ret.data[i][j] + data[i][k] * m.data[k][j] % mod) % mod;
        return ret;
    }
    Matrix operator *= (Matrix m) {return (*this) = (*this) * m;}
    Matrix operator ^ (int b)
    {
        Matrix ret(r, c);
        if (r != c && b > 1) return ret;
        for (int i = 0; i < r; ++i) ret.data[i][i] = 1;
        Matrix a = *this;
        while (b)
        {
            if (b & 1) ret *= a;
            a *= a;
            b >>= 1;
        }
        return ret;
    }
};
ll n,k;
int main()
{
    cin >> n >> k;
    Matrix a(n, n);
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            cin >> a.data[i][j];
    Matrix b = a ^ k;
    for (int i = 0; i < n; ++i,cout << endl)
        for (int j = 0; j < n; ++j)
            cout << b.data[i][j] << ' ';
    return 0;
}
2024/3/6 19:18
加载中...