题目链接
http://codeforces.com/problemset/problem/621/C
思路
设
fi∈[li,ri]
,
fj∈[lj,rj]
,
j=i+1
,如果
fi×fj
不能被
p
整除,那么因为
最后求
∑ni=1(1−bi×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;
}