[数学记录]AT2170 [AGC007C] Pushing Balls

command_block

2021-04-22 16:24:45

Personal

**题意** : 在一条直线上有 $n$ 个球与 $n+1$ 个洞,球和洞相间分布。 记 $d_i$ 为第 $i$ 段两个对象之间的距离,满足 $d_i-d_{i-1}=x (i>1)$ ,并给定 $d_1,x$ ,这样就确定了所有对象的位置。 每次随机选择一个球,将其向某个随机的方向推动。 当球经过某个洞时,若该洞中已经有球,则会滚过这个洞,否则掉入洞中并停止。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT2170/60a5d5d029df9794870209eb9c921ace7bb48177.png) 共进行 $n$ 次操作,操作结束后,每个球都一定进洞了。 求所有球移动的期望总距离,以实数形式回答。 $n\leq 2\times10^5$ ,时限$\texttt{2s}$。 ------------ 神必题。 题目给出的 $d$ 是一个等差序列,这个性质看起来非常刻意,也应该非常关键,然而并没有很好的切入点。 本着未知过半直接莽的原则,先手玩一下吧。下面是 $n=3$ 的情况。 $$\square\quad d\quad\circ\quad d+x\quad\square\quad d+2x\quad\circ\quad d+3x\quad\square\quad d+4x\quad\circ\quad d+5x\quad\square$$ 上面是初始状态,看看推一步之后会形成那些子问题。 - 向左推第一个球 $$\square\!\!\!\!\!\circ\quad d\quad+\quad d+x\quad\square\quad d+2x\quad\circ\quad d+3x\quad\square\quad d+4x\quad\circ\quad d+5x\quad\square$$ $$\square\quad d+2x\quad\circ\quad d+3x\quad\square\quad d+4x\quad\circ\quad d+5x\quad\square$$ - 向右推第一个球 $$\square\quad d\quad+\quad d+x\quad\square\!\!\!\!\!\circ\quad d+2x\quad\circ\quad d+3x\quad\square\quad d+4x\quad\circ\quad d+5x\quad\square$$ $$\square\quad 3d+3x\quad\circ\quad d+3x\quad\square\quad d+4x\quad\circ\quad d+5x\quad\square$$ - 向左推第二个球 $$\square\quad d\quad\circ\quad d+x\quad\square\!\!\!\!\!\circ\quad d+2x\quad+\quad d+3x\quad\square\quad d+4x\quad\circ\quad d+5x\quad\square$$ $$\square\quad d\quad\circ\quad 3d+6x\quad\square\quad d+4x\quad\circ\quad d+5x\quad\square$$ - 向右推第二个球 $$\square\quad d\quad\circ\quad d+x\quad\square\quad d+2x\quad+\quad d+3x\quad\square\!\!\!\!\!\circ\quad d+4x\quad\circ\quad d+5x\quad\square$$ $$\square\quad d\quad\circ\quad d+x\quad\square\quad 3d+9x\quad\circ\quad d+5x\quad\square$$ - 向左推第三个球 $$\square\quad d\quad\circ\quad d+x\quad\square\quad d+2x\quad\circ\quad d+3x\quad\square\!\!\!\!\!\circ\quad d+4x\quad+\quad d+5x\quad\square$$ $$\square\quad d\quad\circ\quad d+x\quad\square\quad d+2x\quad\circ\quad 3d+12x\quad\square$$ - 向右推第三个球 $$\square\quad d\quad\circ\quad d+x\quad\square\quad d+2x\quad\circ\quad d+3x\quad\square\quad d+4x\quad+\quad d+5x\quad\square\!\!\!\!\circ$$ $$\square\quad d\quad\circ\quad d+x\quad\square\quad d+2x\quad\circ\quad d+3x\quad\square$$ 不难发现,这是个线性的问题,每一段空位的长度对答案的贡献是线性的。 于是,我们可以只记录空位长度的期望。 子问题中,各个空位长度的期望是 : $$\square\quad \dfrac{8d+5x}{6}\quad\circ\quad \dfrac{8d+15x}{6}\quad\square\quad \dfrac{8d+25x}{6}\quad\circ\quad \dfrac{8d+35x}{6}\quad\square$$ 居然还是等差序列!有 NOI2019D2T2 那味儿了…… 一般地,新等差序列的首项为 $d+\dfrac{2d+5x}{2n}$ ,公差为 $x+\dfrac{2x}{n}$ (可以通过讨论第一段和第二段得到) 此外,球移动的期望距离为 $d+\dfrac{1}{2n}\sum_{i=1}^{2n-1}ix=d+\dfrac{(2n-1)x}{2}$ 于是,对等差序列做 $n$ 次操作即可得知答案。 ```cpp #include<algorithm> #include<cstdio> #define db double using namespace std; int main() { int n;db d,x; scanf("%d%lf%lf",&n,&d,&x); db ans=0; while(n){ ans+=d+x*(2*n-1)/2; db _d=d+(2*d+5*x)/(2*n),_x=x+2*x/n; d=_d;x=_x;n--; }printf("%.10f",ans); return 0; } ```