[JLOI2016] 成绩比较

推石子

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

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

[egin{aligned} &f[i,j]=d[i] imessum_{k=1}^npmatrix{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 ot= j} dfrac{x-x_i}{x_j-x_i}),容易得到(ell_j(x_j)=1)(ell_j(x_imid i ot=j)=0);于是顺理成章地可以构造出(P(x)​)

[P(x)=sum_{i=0}^ny_iell_i(x) ]

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

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

参考实现

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

原文地址:https://www.cnblogs.com/nosta/p/10554883.html