[JLOI2016] 成绩比较

推石子

首先设\(d[i]=\sum_{t=1}^{U[i]}t^{n-R[i]}(U[i]-t)^{R[i]-1}\),即第\(i\)门课程分数的合法分布方案数;

然后设\(f[i,j]\)表示前\(i\)门课程中\(j\)个人被碾压的合法方案数,转移有:

\[\begin{aligned} &f[i,j]=d[i]\times\sum_{k=1}^n\pmatrix{k\\k-j}\pmatrix{n-k-1\\(R[i]-1)-(k-j)}f[i-1,k] &f[0,n-1]=1 \end{aligned} \]

意义为:决策中之前被碾压的\(k\)个中\(k-j\)个翻身了(这一课程的成绩高于B神),没被碾压的\(n-k-1\)个中则剩\((R[i]-1)-(k-j)\)个成绩高于B神,取组合数。

重头戏来了:如何处理\(d[i]\)?

拉格朗日插值

问题描述:已知\(n\)次多项式多项式\(P(x)\)经过了\(n+1\)个不重点\(\{(x_n,y_n)\}\),求\(P(k)​\)

高斯消元求系数表达式什么的就别来了。

构造\(n\)个拉格朗日基本多项式\(\ell_j(x)=\prod_{i\not= j} \dfrac{x-x_i}{x_j-x_i}\),容易得到\(\ell_j(x_j)=1\)\(\ell_j(x_i\mid i\not=j)=0\);于是顺理成章地可以构造出\(P(x)​\)

\[P(x)=\sum_{i=0}^ny_i\ell_i(x) \]

构造\(\{\ell_{j}(x)\}\)\(O(n^2)\)的,构造\(P(x)\)以及代值计算均是\(O(n)\)的,故总时间复杂度为\(O(n^2)\)

回溯到本题,可以将\(d[i]\)看作一个\(n\)次多项式\(P(x)\)\(U[i]\)处的取值,可以插值计算了。

参考实现

我已经是个嘴巴选手了还要什么实现?留坑逃

posted @ 2019-03-18 20:57  nosta  阅读(232)  评论(0编辑  收藏  举报