Day 4 测试(QwQ 表示没考好 未完待续。。。 可能要过一段时间才会更

Day 4 测试(QwQ 表示没考好  未完待续。。。 可能要过一段时间才会更

Day 4 测试(QwQ 表示没考好  未完待续。。。 可能要过一段时间才会更

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#define LL long long
using namespace std;
LL mod;
LL a[][];
int n,is[],js[];
void exgcd(int a,int b,int &x,int &y){
if(!b)return x=,y=,void();
exgcd(b,a%b,y,x);y-=x*(a/b);
}
int inv(int p){
int x,y;exgcd(p,mod,x,y);
return (x+mod)%mod;
}
void inv(){
for(int k=;k<=n;k++){
for(int i=k;i<=n;i++)
for(int j=k;j<=n;j++)if(a[i][j]){
is[k]=i,js[k]=j;break;
}
for(int i=;i<=n;i++)
swap(a[k][i],a[is[k]][i]);
for(int i=;i<=n;i++)
swap(a[i][k],a[i][js[k]]);
if(!a[k][k]){
puts("No Solution");
exit();
}
a[k][k]=inv(a[k][k]);
for(int j=;j<=n;j++)if(j!=k)
(a[k][j]*=a[k][k])%=mod;
for(int i=;i<=n;i++)if(i!=k)
for(int j=;j<=n;j++)if(j!=k)
(a[i][j]+=mod-a[i][k]*a[k][j]%mod)%=mod;
for(int i=;i<=n;i++)if(i!=k)
a[i][k]=(mod-a[i][k]*a[k][k]%mod)%mod;
}
for(int k=n;k;k--){
for(int i=;i<=n;i++)
swap(a[js[k]][i],a[k][i]);
for(int i=;i<=n;i++)
swap(a[i][is[k]],a[i][k]);
}
}
int main(){
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
scanf("%d%d",&n,&mod);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%lld",a[i]+j);
inv();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
printf("%lld%c",a[i][j],j==n?'\n':' ');
return ;
}

第一题板子题,就是把模数1e9+7改成了输入的数

Day 4 测试(QwQ 表示没考好  未完待续。。。 可能要过一段时间才会更

zhx大佬:这道题如果你没有做过矩阵求逆的话是最简单的(虽然我连样例都差点没看懂

上一篇:deepin linux字体渲染(转)


下一篇:ZOJ 3080 ChiBi(spfa)