2018 ACM-ICPC North Central North America Regional Contest H.New Salaries

題目:click
題意:一家公司有n個員工,第i個員工的工資範圍在[LiL_i,RiR_i],Li1<=LiL_{i-1}<=L_i,Ri1<=RiR_{i-1}<=R_{i},注意L和R可以爲小數,如果一個員工的工資比另一個員工的工資差的話,員工可以投訴,公司將對工資差進行補償,問公司的賠款期望。

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<istream>
#include<vector>
#include<stack>
#include<set>
#include<map>
#include<algorithm>
#include<queue>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3f
#define MAX_len 200005*4
using namespace std;
typedef long long ll;
typedef pair<int,int> PP;
const int mod=998244353;
const int MAXlen=1e5+10;
long double eps=1e-9;
long double l[MAXlen],r[MAXlen];
long double sum[MAXlen],RRR[MAXlen],R[MAXlen],RL[MAXlen],RR[MAXlen];
int main()
{
    int n,i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%Lf %Lf",&l[i],&r[i]);
        if(r[i]-l[i]<=eps)
        {
            RRR[i]=RRR[i-1];
            R[i]=R[i-1];
            RR[i]=RR[i-1];
            RL[i]=RL[i-1];
            sum[i]=sum[i-1]+(r[i]+l[i])/2.0;
            continue;
        }
        RRR[i]=(r[i]*r[i]*r[i])/(r[i]-l[i])+RRR[i-1];
        R[i]=R[i-1]+r[i]/(r[i]-l[i]);
        RR[i]=RR[i-1]+r[i]*r[i]/(r[i]-l[i]);
        RL[i]=RL[i-1]+1.0/(r[i]-l[i]);
        sum[i]=sum[i-1]+(r[i]+l[i])/2.0;
    }
    long double ans=0;
    for(i=1;i<=n;i++)
    {
        ans+=(i-1)*1.0*(r[i]+l[i])/2.0-sum[i-1];
        if(r[i]-l[i]<=eps)
            continue;
        int temp=upper_bound(r+1,r+1+n,l[i])-r;
        if(temp>=i)
            continue;
        ans+=(1.0/3.0/(r[i]-l[i]))*(RRR[i-1]-RRR[temp-1]);
        ans-=(l[i]/(r[i]-l[i]))*(RR[i-1]-RR[temp-1]);
        ans+=(l[i]*l[i]/(r[i]-l[i]))*(R[i-1]-R[temp-1]);
        ans-=(l[i]*l[i]*l[i]/3.0/(r[i]-l[i]))*(RL[i-1]-RL[temp-1]);
    }
    ans=ans/(n*1.0)/(n*1.0);
    printf("%.9Lf",ans);
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章