社区讨论

求差错

P4783【模板】矩阵求逆参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lodel52u
此快照首次捕获于
2023/10/31 05:19
2 年前
此快照最后确认于
2023/11/06 20:39
2 年前
查看原帖
一直30分,TLE后面7个点,求大佬差错
CPP
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
long long f[510][1010];
long long  M=(1e9)+7;
inline long long  power(long long x,long long y){
	long long ans=1;
	while(y){
		if(y&1) ans=ans*x%M;
		x=x*x%M;
		y>>=1;
	}
	return ans;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int n;
	cin>>n;
	for(register int i=1;i<=n;i++)
	for(register int j=1;j<=n;j++)
	  cin>>f[i][j];
	for(register int i=1;i<=n;i++)
	f[i][i+n]=1;
	for(register int i=1;i<=n;i++){
		for(register int j=i;j<=n;j++)
		if(f[j][i]){
			for(register int k=1;k<=2*n;k++)
			swap(f[i][k],f[j][k]);
			break;
		}
		if(f[i][i]==0){
			cout<<"No Solution\n";
			return 0;
		}
		long long t=power(f[i][i],M-2);
		for(register int j=i;j<=n+n;j++)f[i][j]=f[i][j]*t%M;
		for(register int j=1;j<=n;j++){
			if(i==j)continue;
			long long r=f[j][i];
			for(register int k=i;k<=n+n;k++)
			f[j][k]=(f[j][k]-r*f[i][k]%M+M)%M;
		}
	}	
	for(register int i=1;i<=n;i++){
		for(register int j=n+1;j<=n+n;j++)	cout<<f[i][j]<<" ";
		cout<<"\n";
	}
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...