```cpp
#include <iostream>
#include <cstdio>
#include <cctype>
using namespace std;
#define lli long long int
lli mod = 1e9 + 7;
template<typename T_>inline T_ getnum()
{
T_ res=0;
bool flag=false;
char ch=getchar();
while (!isdigit(ch))
{
flag=flag?flag:ch=='-';
ch=getchar();
}
while (isdigit(ch))
{
res=(res<<1)+(res<<3)+ch-'0';
ch=getchar();
}
return flag?-res:res;
}
template<typename T_>inline void putnum(T_ num)
{
if (num<0)putchar('-'),num=-num;
if (num>9)putnum<T_>(num/10);
putchar('0'+num%10);
}
struct matrix{
lli data[401][401];
matrix(int n){
for (register int i=1;i<=n;i++)
for (register int j=1;j<=n;j++)
data[i][j]=0;
}
inline void add_line(int n,int line,lli num)
{
for (register int i=1;i<=n;i++)
{
this->data[line][i]=((this->data[line][i]+num)+mod)%mod;
}
}
inline void mul_line(int n,int line,lli k)
{
for (register int i=1;i<=n;i++)
this->data[line][i]=(this->data[line][i]*k+mod)%mod;
}
inline void swap_line(int n,int line1,int line2)
{
for (register int i=1;i<=n;i++)
swap(this->data[line1][i],this->data[line2][i]);
}
inline void add_mul(int n,int line1,int line2,lli k)
{
for (register int i=1;i<=n;i++)
this->data[line1][i]=((this->data[line1][i]+k*this->data[line2][i]%mod)+mod)%mod;
}
inline void Init(int n)
{
for (register int i=1;i<=n;i++)
for (register int j=1;j<=n;j++)
this->data[i][j]=getnum<lli>();
}
inline void print(int n)
{
for (register int i=1;i<=n;putchar('\n'),i++)
for (register int j=1;j<=n;putchar(' '),j++)
putnum<lli>(this->data[i][j]);
}
};
lli quick_pow(lli a,lli b = mod - 2)
{
if (b==0)return 1;
else if (a==1)return 1;
else
{
lli res=1;
while (b)
{
if (b&1)res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
}
int main()
{
lli n=getnum<lli>();
matrix a(n),b(n);
a.Init(n);
for (register int i=1;i<=n;i++)
b.data[i][i]=1;
for (register int i=1;i<=n;i++)
{
if (!a.data[i][i])
{
for (register int j=i+1;j<=n;j++)
if (a.data[j][i])
{
a.swap_line(n,j,i);
b.swap_line(n,j,i);
break;
}
}
if (!a.data[i][i])
{
cout<<"No Solution"<<endl;
return 0;
}
a.mul_line(n,i,quick_pow(a.data[i][i]));
b.mul_line(n,i,quick_pow(a.data[i][i]));
for (register int j=i+1;j<=n;j++)
{
b.add_line(n,j,-a.data[j][i]);
a.add_line(n,j,-a.data[j][i]);
}
}
for (register int i=n-1;i>=1;i--)
{
for (register int j=i+1;j<=n;j++)
b.add_mul(n,i,j,-a.data[i][j]),a.add_mul(n,i,j,-a.data[i][j]);
}
b.print(n);
return 0;
}
```
感觉没毛病啊...摸不着头脑
by Jelly_Goat @ 2019-04-11 17:54:34
你还没调出来啊
by ThomasX @ 2019-04-11 18:08:15
~~**您看看我交PR的时候刷了4页,谁更丢人**~~
by Piwry @ 2020-01-13 10:29:35