P4111 [HEOI2015]小 Z 的房间 题解
题面
板子。注意模数不是质数的 \(\det\):
inline int det(int n){
int res=1;bool flag=0;
for(int i=1;i<=n;++i)
for(int j=i+1;j<=n;++j){
while(a[i][i]){
int tmp=a[j][i]/a[i][i];
for(int k=i;k<=n;++k) modadd(a[j][k],(ll)(mod-tmp)*a[i][k]%mod);
std::swap(a[i],a[j]);flag^=1;
}
std::swap(a[i],a[j]);flag^=1;
}
for(int i=1;i<=n;++i) res=(ll)res*a[i][i]%mod;
return flag?mod-res:res;
}
复杂度应该是 \(O(n^2(n+\log p))\)。