DEV-C++出现编译时的段错误
  • 板块学术版
  • 楼主kyEEcccccc
  • 当前回复6
  • 已保存回复6
  • 发布时间2020/12/20 09:24
  • 上次更新2023/11/5 05:54:17
查看原帖
DEV-C++出现编译时的段错误
312811
kyEEcccccc楼主2020/12/20 09:24

题目是矩阵快速幂,使用结构体写编译器炸了。

#include <bits/stdc++.h>

using namespace std;

const long long MOD = 1000000007ll;

struct Matrix {
    int r, c;
    long long a[210][210];

    Matrix multi(Matrix m) {
        Matrix res;
        res.r = this->r;
        res.c = m.c;

        for (int i = 1; i <= res.r; ++i) {
            for (int j = 1; j <= res.c; ++j) {
                res.a[i][j] = 0ll;
            }
        }

        for (int i = 1; i <= this->r; ++i) {
            for (int k = 1; k <= this->c; ++k) {
                if (this->a[i][k] == 0ll) {
                    continue;
                }

                for (int j = 1; j <= m.c; ++j) {
                    res.a[i][j] += this->a[i][k] * m.a[k][j] % MOD;
                    res.a[i][j] %= MOD;
                }
            }
        }

        return res;
    }

    void input(void) {
        for (int i = 1; i <= this->r; ++i) {
            for (int j = 1; j <= this->c; ++j) {
                scanf("%lld", &this->a[i][j]);
            }
        }
    }

    void output(void) {
        for (int i = 1; i <= this->r; ++i) {
            for (int j = 1; j <= this->c; ++j) {
                printf("%lld", this->a[i][j]);
                putchar(j == this->c ? '\n' : ' ');
            }
        }
    }
};

int main(void) {
    int n, k;
    scanf("%d%d", &n, &k);

    Matrix m;
    m.r = m.c = n;
    m.input();

    Matrix res;
    res.r = res.c = n;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            res.a[i][j] = (i == j ? 1 : 0);
        }
    }

    while (k != 0) {
        if (k & 1) {
            res = res.multi(m);
        }
        m = m.multi(m);
        k >>= 1;
    }

    res.output();

    return 0;
}

2020/12/20 09:24
加载中...