bzoj2698: 染色

来源:互联网 发布:unity3d 像素画风 编辑:程序博客网 时间:2024/04/20 13:57

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2698

思路:

令xi=1,col=white
   =0,col=black
E[X]=E[Σxi]=ΣE[xi]
因为只要覆盖一次就算覆盖,所以直接算不太方便
考虑每个点m次不被覆盖的概率
就是一次不被覆盖的概率的m次方
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>const int maxn=1000010;using namespace std;int n,m,S,T;double p[maxn],all,cnt[maxn],ans; double get(int a,int l,int r){    return 1.0*(a-l+1+a-r+1)*(r-l+1)/2;}double qpow(double a,int b){    double res=1.0;    for (;b;b>>=1,a=a*a) if (b&1) res=res*a;    return res;} int main(){    scanf("%d%d%d%d",&n,&m,&S,&T);    all=1.0*(n-T+1+n-S+1)*(T-S+1)/2;    for (int i=S+1;i<=n;i++){        int mins=S,maxs=min(i-1,T);        cnt[i]+=get(i-1,mins,maxs);    }    for (int i=1;i<=n-S;i++){        int mins=S,maxs=min(n-i,T);        cnt[i]+=get(n-i,mins,maxs);    }    for (int i=1;i<=n;i++)        ans+=1-qpow(cnt[i]/all,m);    printf("%.3f\n",ans);    return 0;}



0 0