zoukankan      html  css  js  c++  java
  • uoj#352. 新年的五维几何(概率期望+爆搜)

    传送门

    我还以为这是个五维半平面交呢……结果没看数据范围……

    题解

    //minamoto
    #include<bits/stdc++.h>
    #define R register
    #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
    #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
    #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
    using namespace std;
    const int N=7;
    int l[N],r[N],a[N][N],vis[N],x[N],to[N],f[(1<<5)+5];
    int n,tot,ans,lim,sum,res;
    void solve(){
    	fp(i,1,n)fp(j,1,n){
    		if(x[i]-x[j]-a[i][j]<0)return;
    		if(x[i]-x[j]-a[i][j]>0)continue;
    		if(l[i]==r[i]&&l[j]!=r[j])return;
    	}
    	memset(f,0,sizeof(f));
    	memset(to,0,sizeof(to));
    	fp(i,1,n)if(!vis[i]){
    		fp(j,1,n)if(!vis[j]&&i!=j){
    			if(x[i]-x[j]-a[i][j]==0)to[j-1]|=(1<<(i-1));
    		}
    	}
    	f[0]=1;
    	fp(i,1,(1<<n)-1)fp(j,0,n-1)if((i>>j&1)&&(i&to[j])==to[j])f[i]+=f[i^(1<<j)];
    	ans+=f[lim];
    }
    void dfs(int pos){
    	if(pos==n+1)return solve();
    	if(vis[pos])dfs(pos+1);
    	else{
    		fp(i,l[pos],r[pos]-1)x[pos]=i,dfs(pos+1);
    	}
    }
    int main(){
    //	freopen("testdata.in","r",stdin);
    	scanf("%d",&n);
    	fp(i,1,n){
    		scanf("%d%d",&l[i],&r[i]);
    		if(l[i]==r[i])vis[i]=1,x[i]=l[i];
    	}
    	fp(i,1,n)fp(j,1,n)scanf("%d",&a[i][j]);
    	fp(i,1,n)if(a[i][i]>0)return puts("0"),0;
    	fp(i,1,n)if(!vis[i])lim|=(1<<(i-1));
    	dfs(1);
    	sum=1;
    	fp(i,1,n)if(l[i]!=r[i])sum*=r[i]-l[i],++res,sum*=res;
    	printf("%.10lf
    ",1.0*ans/sum);
    	return 0;
    }
    
  • 相关阅读:
    Swift3 ——S3 API中间件兼容性测试
    解决 Python.h:没有那个文件或目录 错误的方法
    Swift云存储特性研究
    解决updateaptxapi占用资源过高的问题
    dll开发及调用
    git批量备份
    UDP端口扫描
    将markdown文件转换为pdf
    指定ssh key访问git
    CentOS6.2调整home分区大小
  • 原文地址:https://www.cnblogs.com/bztMinamoto/p/10248740.html
Copyright © 2011-2022 走看看