Advertisement
yicongli

LG3317

Apr 2nd, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define gc c=getchar()
  6. #define r(x) read(x)
  7. #define db double
  8.  
  9. template<typename T>
  10. inline void read(T&x){
  11.     T k=1;char gc;x=0;
  12.     while(!isdigit(c)){if(c=='-')k=-1;gc;}
  13.     while(isdigit(c))x=x*10+c-'0',gc;x*=k;
  14. }
  15.  
  16. const int N=55;
  17. const db eps=1e-8;
  18.  
  19. inline int dcmp(const db &a){
  20.     return (fabs(a)<eps)?0:(a>0?1:-1);
  21. }
  22.  
  23. long db G[N][N];
  24.  
  25. inline db det(int n){
  26.     db ret=1;
  27.     for(int i=1;i<=n;++i){
  28.         int mx=i;
  29.         for(int j=i+1;j<=n;++j){
  30.             if(dcmp(G[j][i]-G[mx][i])>0)mx=j;
  31.         }
  32.         for(int j=1;j<=n;++j){
  33.             swap(G[i][j],G[mx][j]);
  34.         }
  35.         for(int j=i+1;j<=n;++j){
  36.             db t=G[j][i]/G[i][i];
  37.             for(int k=1;k<=n;++k){
  38.                 G[j][k]-=G[i][k]*t;
  39.             }
  40.         }
  41.         ret*=G[i][i];
  42.     }
  43.     return fabs(ret);
  44. }
  45.  
  46. int main(){
  47.     // freopen(".in","r",stdin);
  48.     // freopen(".out","w",stdout);
  49.     int n;r(n);
  50.     db tmp=1;
  51.     for(int i=1;i<=n;++i){
  52.         for(int j=1;j<=n;++j){
  53.             db x,y;scanf("%lf",&x);
  54.             if(i==j)continue;
  55.             if(x==1)x=1-eps;
  56.             y=1-x;
  57.             G[i][j]=-x/y;
  58.             if(i<j)tmp*=y;
  59.             G[i][i]-=G[i][j];
  60.         }
  61.     }
  62.     printf("%.5lf\n",det(n-1)*tmp);
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement