说真的模拟赛的时候真心想不到用概率去做。
后来一分析顿时就觉得有道理。
代码很直白。不需要什么注释了,最重要的是思路。转化成概率。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,p;
cin >> n >> p;
vector<int> data = vector<int>(n);
vector<int> rang = vector<int>(n);
double pp[100005];
int l, r;
for(int i = 0; i < n; ++i)
{
cin >> l >> r;
data[i] = r/p - (l-1)/p;
rang[i] = r-l + 1;
pp[i]=1.0-data[i]*1.0/rang[i];
}
double ans=0;
for(int i=0; i<n-1; i++)
{
ans+=(1-pp[i]*pp[i+1])*2000;
}
ans+=(1-pp[n-1]*pp[0])*2000;
printf("%.12lf\n",ans);
return 0;
}