CodeForces 621C 数学概率期望计算

昨天训练赛的题..比划了好久才想出来什么意思

之前想的是暴力for循环求出来然后储存数组 后来又想了想 自己萌的可以..

思路就是求出来每个人与他的右边的人在一起能拿钱的概率(V(或)的关系)然后*2000

又想起高考概率无情的2分...哭一会先

另外 这题的输出我没看懂...试了好几遍才过...(好吧我承认我看答案了)

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
using namespace std;
int n,p;
int  l[100050];
int  r[100050];
int main()
{
    while(~scanf("%d%d",&n,&p))
    {
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&l[i],&r[i]);
        }
        l[n]=l[0];
        r[n]=r[0];
        double sum=0;
        for(int i=0;i<n;i++)
        {
            int x=(r[i]/p-(l[i]-1)/p);/// 偶数数量
            int y=(r[i+1]/p-(l[i+1]-1)/p);
            int xx=(r[i]-l[i]+1)-x;    ///奇数数量
            int yy=(r[i+1]-l[i+1]+1)-y;
            double z=1.0-1.0*(xx*1.0*yy)/(r[i]-l[i]+1)/(r[i+1]-l[i+1]+1);
            sum+=2000.0*z;
        }
        printf("%.6f\n",sum);
    }

}

  

你可能感兴趣的:(CodeForces 621C 数学概率期望计算)