Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define gc c=getchar()
- #define r(x) read(x)
- #define ll long long
- #define db double
- template<typename T>
- inline void read(T&x){
- x=0;T k=1;char gc;
- while(!isdigit(c)){if(c=='-')k=-1;gc;}
- while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
- }
- const int N=5e5+7;
- int t[N];
- int y[N];
- db f[N];
- db tag[N];
- int main(){
- // freopen(".in","r",stdin);
- // freopen(".out","w",stdout);
- int n,h;r(n),r(h);
- for(int i=1;i<=n;++i){
- r(t[i]),r(y[i]);
- y[i]+=1e5;
- }
- y[0]=1e5;
- for(int i=1;i<=n;++i){
- int l=min(y[i-1],y[i]);
- int r=max(y[i-1],y[i]);
- if(l==r){
- tag[l]+=(t[i]-t[i-1]);
- continue;
- }
- db w=(t[i]-t[i-1])/(db)(r-l);
- f[l+1]+=w;
- f[r+1]-=w;
- }
- for(int i=1;i<=2e5+h;++i)f[i]+=f[i-1];
- db sum=0;
- for(int i=0;i<=h;++i){
- sum+=f[i]+tag[i];
- }
- db ans=sum;
- for(int i=1;i<=2e5;++i){
- // printf("l=%d, r=%d, sum=%.8lf\n",i,i+h,f[i+h]-f[i]);
- sum-=f[i]+tag[i-1];
- sum+=f[i+h]+tag[i+h];
- ans=max(ans,sum);
- }
- printf("%.8lf\n",ans);
- return 0;
- }
- /*
- 3 2
- 50 0
- 75 2
- 100 2
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement