for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
while(a[i][i])
{
int t=a[j][i]/a[i][i];
for(int k=i;k<=n;k++) a[j][k]=(1LL*a[j][k]-1LL*t*a[i][k]%p+p)%p;
for(int k=i;k<=n;k++) swap(a[i][k],a[j][k]);
flag^=1;
}
for(int k=i;k<=n;k++) swap(a[i][k],a[j][k]);
flag^=1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
while(a[i][i])
{
int t=a[j][i]/a[i][i];
for(int k=i;k<=n;k++) a[j][k]=((1LL*a[j][k]-1LL*t*a[i][k]%p)%p+p)%p;
for(int k=i;k<=n;k++) swap(a[i][k],a[j][k]);
flag^=1;
}
for(int k=i;k<=n;k++) swap(a[i][k],a[j][k]);
flag^=1;
}
}
前者AC,后者TLE,差别只是辗转相除法时作差多取了个模
for(int k=i;k<=n;k++) a[j][k]=(1LL*a[j][k]-1LL*t*a[i][k]%p+p)%p;
for(int k=i;k<=n;k++) a[j][k]=((1LL*a[j][k]-1LL*t*a[i][k]%p)%p+p)%p;