#include <iostream> #include <cmath> #include <cstring> #include <string> #include <algorithm> #include <cstdio> #include <queue> #include <map> #include <vector> using namespace std; int cmp(int a,int b) { return a>b; } int num[100010]; double p[100010]; double psum[100010]; int main() { int n,sa; scanf("%d%d",&n,&sa); for(int i=1;i<=n;i++) scanf("%d",&num[i]); for(int i=1;i<=n;i++) scanf("%lf",&p[i]); double ans=0; psum[0]=0; psum[1]=p[1]; for(int i=2;i<=n;i++) psum[i]=psum[i-1]+p[i]; for(int i=1;i<=n;i++) { int l=upper_bound(num+1,num+i+1,num[i]+sa,cmp)-num; int r=lower_bound(num+1,num+i+1,num[i],cmp)-num; if(r==l) continue; ans+=(psum[r-1]-psum[l-1])*(1.0-p[i]); } printf("%.9f\n",ans); return 0; }
时间: 2024-10-14 00:47:19