求调WAon1
查看原帖
求调WAon1
1220111
xiaoyang222楼主2024/11/12 22:17

rt,应该是无解判错了。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
const int N=300+5;
const double EPS=1e-8;
double a[N][N];
int iac[N],n,m,p,q;
bool freeopen[N];
void solve(){//消元
	double qwq;
	for (int i=1,j=1;i<=n && j<=m;++i){
		for (int k=i+1;k<=n;++k)
			if (a[k][j]){
				for (int p=1;p<=m+1;++p) swap(a[i][p],a[k][p]);
				break;
			}
		if (fabs(a[i][j])>=EPS){
			for (int k=1;k<=n;++k){
				if (i==k) continue;
				qwq=a[k][j]/a[i][j];
				for (int q=1;q<=m+1;++q){
					a[k][q]=a[k][q]-a[i][q]*qwq;
				}
			}
			iac[j]=i;
			freeopen[j]=0;
		}else{
			--i;
		}
		++j;
		for (int j=1;j<=n;++j){
			bool f=1;
			for (int k=1;k<=m;++k){
				if (fabs(a[j][k])>=EPS){f=0;break;}
			}
			if (f && fabs(a[j][m+1])>=EPS){
				cout<<"No Solution"<<endl;
				exit(0);
			}
		}
	}
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin >> n;
	m=n;
	for (int i=1;i<=n;++i)
		for (int j=1;j<=m+1;++j)
			cin >> a[i][j];
	for (int i=0;i<N;++i) freeopen[i]=1;
	solve();
	cout.flush();
	for (int i=1;i<=m;++i){
		if (freeopen[i]) printf("0.00\n");
		else printf("%.2lf\n",a[iac[i]][m+1]/a[iac[i]][i]);
	}
	cout.flush();
	return 0;
}
2024/11/12 22:17
加载中...