https://www.spoj.com/problems/DETER3/en/
题意:计算行列式
#include <iostream>
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[205][205];
ll mode;
int n;
ll det(){
int i,j,k;
ll ans=1;
for(i=0;i<n;i++){
//对角线上为0需要找到这个位置不为0的和他交换
if(!a[i][i]){
bool flag=false ;
for(j=i+1;j<n;j++){
if(a[j][i]){
flag=true;
for(k=0;k<n;k++)swap(a[i][k],a[j][k]);
ans=-ans;
break;
}
}
if(!flag)return 0;//不满秩
}
for(j=i+1;j<n;j++){
while(a[j][i]){//消去下三角种不为0的位置
ll tmp=a[i][i]/a[j][i];
for(k=i;k<n;k++){
a[i][k]=(a[i][k]-tmp*a[j][k])%mode;
swap(a[i][k],a[j][k]);
}
ans=-ans;
}
}
ans=(ans*a[i][i])%mode;
}
return (ans%mode+mode)%mode;
}
int main()
{
int i,j;
while(cin>>n>>mode){
for(i=0;i<n;i++){
for(j=0;j<n;j++){
cin>>a[i][j];
}
}
printf("%lld\n",det());
}
// cout << "Hello world!" << endl;
return 0;
}