随机+硬核积分+前缀和——ICPC NCNA 2018 H

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机+硬核积分+前缀和——ICPC NCNA 2018 H相关的知识,希望对你有一定的参考价值。

有一个结论:在线段(长为L)上任取两点,截取的线段期望长度是L/3

技术图片

 

 知道这个结论后这题就可以做了

但还是要分类大讨论+公式化简,用前缀和做

#include <bits/stdc++.h>
#define _for(i,a,b) for(int i=a;i<b;++i)
#define _rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
typedef long long LL;
typedef long double LD;
const int MAX
N = 1e5 + 10;
const LD eps
= 1e-10;
LD L[MAXN], R[
MAXN], mid
[MAXN], summ
id[MAXN], len
[MAXN], tlen[
MAXN][4];
LL n;
int main() {
scanf("%lld", &n);
_rep(i, 1, n) {
scanf("%Lf%Lf", &L[i], &R[i]);
mid[i] = (L[i] + R[i]) / 2;
len[i] = R[i] - L[i];
summid[i] = summid[i - 1] + mid[i];

LD temp = 1;
for (nt j = 0; j < 4; ++j) {
temp *= R[i];
}
}

LD ans = 0;
_rep(i, 1, n) {
ans += (i - 1)*mid[i] - summid[i - 1];
if (len[i] < eps) continue;
int pos = upper_bound(R + 1, R + 1 + n, L[i]) - R;
LD temp = 1;
ans += temp / len[i] * (tlen[i - 1][3] - tlen[pos - 1][3]) / 3;
temp *= L[i];
ans -= temp / len[i] * (tlen[i - 1][2] - tlen[pos - 1][2]);
temp *= L[i];
ans += temp / len[i] * (tlen[i - 1][1] - tlen[pos - 1][1]);
temp *= L[i];
ans -= temp / len[i] * (tlen[i - 1][0] - tlen[pos - 1][0]) / 3;
}
printf("%.9Lf ", ans / n / n);
return 0;
}

以上是关于随机+硬核积分+前缀和——ICPC NCNA 2018 H的主要内容,如果未能解决你的问题,请参考以下文章

第45届ICPC沈阳站部分题解(DFGHIK)

第45届ICPC沈阳站部分题解(DFGHIJK)

2016 ACM/ICPC亚洲区大连站 F - Detachment 维护前缀积前缀和二分搜索优化

ACM-ICPC之路

HDU 5954 - Do not pour out - [积分+二分][2016ACM/ICPC亚洲区沈阳站 Problem G]

2020-2021 ICPC Southeastern European Regional E. Divisible by 3(前缀和,优化暴力)