621C. Wet Shark and Flowers【概率】

来源:互联网 发布:讲诚信 知礼仪 编辑:程序博客网 时间:2024/06/05 07:59

题目链接

http://codeforces.com/problemset/problem/621/C

思路

fi[li,ri],fj[lj,rj],j=i+1,如果fi×fj不能被p整除,那么因为p是素数,则fifj都不能被p整除.
[1,x]范围内能被p整除的整数个数是xp,故[li,ri]内能被p整除的整数个数为ai=ripli1p,不能被p整除的个数bi=rili+1airili+1.
最后求ni=1(1bi×bi+1)×2000即可(注意i=n时取i+1=1).

AC代码

#include <iostream>#include <cstdio>using namespace std;int l[100000+100],r[100000+100];int main(){    int n,p;    scanf("%d%d",&n,&p);    for(int i=1 ; i<=n ; ++i)    {        scanf("%d%d",&l[i],&r[i]);    }    double sum=0;    for(int i=1 ; i<=n ; ++i)    {        int j=i+1;        if(i==n)            j=1;        int ai=r[i]/p-(l[i]-1)/p,aj=r[j]/p-(l[j]-1)/p;        sum+=(1-(double)(r[i]-l[i]+1-ai)/(r[i]-l[i]+1)               *(double)(r[j]-l[j]+1-aj)/(r[j]-l[j]+1))*2000;    }    printf("%.10f\n",sum);    return 0;}
0 0
原创粉丝点击