标签:image com space pow load 需要 max c++ quick
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define re register
const int maxn=300;
const int mod=998244353;
ll a[maxn][maxn<<1];
ll quickpow(ll a,ll b,ll p)
{
ll ans=1;
while (b)
{
if (b&1)///b为奇数
ans=(ans*a)%p;
a=(a*a)%p;///b为偶数
b>>=1;
}
return ans;
}
for(re int i=1,t;i<=n;++i)
{
t=i;
for(re int j=i+1;j<=n;++j)///找出每一列的最大主元
{
if(abs(a[j][i])>abs(a[t][i]))///找寻最大主元
{
t=j;
}
}
if(i^t)///相当于i!=t,保证不在当前行
{
swap(a[i],a[t]);///交换行
}
ll w=quickpow(a[i][i],mod-2,mod);///直接求出对角元素值,方便消元
for(re int j=1;j<=n;++j)
{
if(j!=i)///当前行直接乘以逆元即可,无需进行消元
{
ll tmp=a[j][i]*w%mod;///主元乘以逆元
for(int k=i;k<=(n<<1);++k)
{
a[j][k]=((a[j][k]-a[i][k]*tmp)%mod+mod)%mod;///该点元素直接减去i行元素乘以对称点(i i)的逆元
}
}
}
for(re int j=1;j<=(n<<1);++j)a[i][j]=(w*a[i][j])%mod;///最后当前行直接乘以逆元保证主元为1,最后能得到单位矩阵
}
标签:image com space pow load 需要 max c++ quick
原文地址:https://www.cnblogs.com/qimang-311/p/13305052.html