2.6

T1:

我们发现,答案就是每一条边的期望相加

然后就只要对每一条边单独算期望就好了

至于怎么算,那么我们可以分6种讨论:

px<=qy 全部都可以 

py<=qx 全都不行

如果区间有相交,那么它的期望就是每一段的期望*长度最后/总长度

然后就是每一段期望怎么求:

然后如果一段是全部在q之前,那么就是1

如果在后面,那么就是0

然后如果在中间的就是(首+尾)/2

对于单点,期望就是后面一个能碰到的长度/总长度

详细来说见代码:

il double zhi(double x,int y)
{
    return max((p[y]-x)/(p[y]-q[y]),0.0);
}
il double calc(int x,int y)
{
    if(p[x]<=q[y]) return 1;
    if(p[y]<=q[x]) return 0;
    double lx=p[x]-q[x],ly=p[y]-q[y];
    if(q[y]<=q[x]&&p[x]<=p[y]) return (zhi(q[x],y)+zhi(p[x],y))/2.0;
    if(q[x]<=q[y]&&p[x]<=p[y]) return ((q[y]-q[x])*1.0+(1.0+(zhi(p[x],y)))/2.0*(p[x]-q[y]))/lx;
    if(q[y]<=q[x]&&p[y]<=p[x]) 
    {
    //    printf("%lf %lf %lf\n",zhi(q[x],y),zhi(p[y],y),p[y]-q[x]);
        return ((zhi(q[x],y)+zhi(p[y],y))/2*(p[y]-q[x]))/lx;
    }
    if(q[x]<=q[y]&&p[y]<=p[x]) return ((q[y]-q[x])*1.0+(p[y]-q[y])*0.5)/lx;
}

T2:

枚举所有方法,复杂度尾组合级,没分


 

T3:

直接爆搜时间在l~r的联通快,20分

posted @ 2020-02-06 18:52  shenbear  阅读(288)  评论(0编辑  收藏  举报