zoukankan      html  css  js  c++  java
  • [SDOI2014] 重建

    #include <bits/stdc++.h>
    #define eps 1e-6
    using namespace std;
    
    const int N = 55;
    
    namespace mat {
    double a[N][N];
    int n,p=1;
    
    double gauss_jordan() {
        double ans = 1;
    	for(int i=1;i<=n;i++) {
    		int r=i;
    		for(int j=i+1;j<=n;j++) if(fabs(a[j][i])>fabs(a[r][i])) r=j;
    		if(r-i) {for(int j=1;j<=n+1;j++) swap(a[i][j],a[r][j]); ans*=-1;}
    		//if(fabs(a[i][i])<eps) {p=0; return;}
    		for(int j=1;j<=n;j++) if(j-i) {
    			double tmp=a[j][i]/a[i][i];
    			for(int k=i+1;k<=n+1;k++) a[j][k]-=a[i][k]*tmp;
    		}
    		ans*=a[i][i];
    	}
    	return ans;
    }
    } // namespace mat
    
    double n,p[N][N];
    
    int main() {
        cin>>n;
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=n;j++) {
                cin>>p[i][j];
                if(abs(1-p[i][j])<eps) p[i][j]-=eps;
            }
        }
        double ans=1;
        for(int i=1;i<=n;i++) {
            for(int j=i+1;j<=n;j++) {
                ans*=1-p[i][j];
            }
        }
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=n;j++) if(i!=j) {
                mat::a[i][j]=-p[i][j]/(1-p[i][j]);
                mat::a[i][i]+=p[i][j]/(1-p[i][j]);
            }
        }
        mat::n=n-1;
        ans*=mat::gauss_jordan();
        printf("%.8lf
    ",ans);
    }
    
  • 相关阅读:
    lftp使用普通ftp模式登录
    echo 单引号和双引号
    断言、检查点相关函数方法
    hierarchyviewer
    Uiautomatorviewer
    Appium Inspector
    Python+requests+unittest+excel实现接口自动化测试框架
    Selenium IDE
    面试总结
    常见问题总结
  • 原文地址:https://www.cnblogs.com/mollnn/p/12245705.html
Copyright © 2011-2022 走看看