Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define gc c=getchar()
- #define r(x) read(x)
- #define db double
- template<typename T>
- inline void read(T&x){
- T k=1;char gc;x=0;
- while(!isdigit(c)){if(c=='-')k=-1;gc;}
- while(isdigit(c))x=x*10+c-'0',gc;x*=k;
- }
- const int N=55;
- const db eps=1e-8;
- inline int dcmp(const db &a){
- return (fabs(a)<eps)?0:(a>0?1:-1);
- }
- long db G[N][N];
- inline db det(int n){
- db ret=1;
- for(int i=1;i<=n;++i){
- int mx=i;
- for(int j=i+1;j<=n;++j){
- if(dcmp(G[j][i]-G[mx][i])>0)mx=j;
- }
- for(int j=1;j<=n;++j){
- swap(G[i][j],G[mx][j]);
- }
- for(int j=i+1;j<=n;++j){
- db t=G[j][i]/G[i][i];
- for(int k=1;k<=n;++k){
- G[j][k]-=G[i][k]*t;
- }
- }
- ret*=G[i][i];
- }
- return fabs(ret);
- }
- int main(){
- // freopen(".in","r",stdin);
- // freopen(".out","w",stdout);
- int n;r(n);
- db tmp=1;
- for(int i=1;i<=n;++i){
- for(int j=1;j<=n;++j){
- db x,y;scanf("%lf",&x);
- if(i==j)continue;
- if(x==1)x=1-eps;
- y=1-x;
- G[i][j]=-x/y;
- if(i<j)tmp*=y;
- G[i][i]-=G[i][j];
- }
- }
- printf("%.5lf\n",det(n-1)*tmp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement