Gauss-Jordan消元法WA 27pts求助
查看原帖
Gauss-Jordan消元法WA 27pts求助
905636
_xguagua_Firefly_楼主2024/12/16 17:38
#include <bits/stdc++.h>
#define int long long
using namespace std;

constexpr int MOD = 1e9 + 7;
inline int qpow(int b,int p)
{
    int res = 1;
    while(p)
    {
        if(p & 1)
            res = res * b % MOD;
        b = b * b % MOD;
        p >>= 1;
    }
    return res;
}
#define inv(x) qpow(x,MOD - 2)
int n;
int val[824][424];
signed main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin >> n;
    for(int i = 1;i <= n;i++)
    {
        val[i][n + i] = 1;
        for(int j = 1;j <= n;j++)
            cin >> val[i][j];
    }
    for(int i = 1;i <= n;i++)
    {
        int ptr = i;
        for(int j = i;j <= n;j++)
        {
            if(abs(val[j][i]) > abs(val[ptr][i]))
                ptr = j;
        }
        for(int j = 1;j <= (n << 1);j++)
            swap(val[i][j],val[ptr][j]);
        if(val[i][i] == 0)
        {
            cout << "No Solution";
            return 0;
        }
        int v = inv(val[i][i]);
        for(int j = 1;j <= (n << 1);j++)
            val[i][j] = (val[i][j] * v) % MOD;
        for(int j = 1;j <= n;j++)
        {
            if(i == j)
                continue;
            int p = val[j][i];
            for(int k = 1;k <= (n << 1);k++)
                val[j][k] = ((val[j][k] - p * val[i][k] % MOD) % MOD + MOD) % MOD;
        }

    }
    for(int i = 1;i <= n;i++)
    {
        for(int j = n + 1;j <= (n << 1);j++)
            cout << val[i][j] << " ";
        cout << "\n";
    }
}
2024/12/16 17:38
加载中...