The 15-th BIT Campus Programming Contest - Onsite Round——J题(枚举优化或拉格朗日插值)

题目链接:https://codeforces.com/gym/102878/problem/J

题解

这个题有两种做法,第二种做法比较好想,但是需要优化一下。
这里先说第一种做法(拉格朗日插值或者高斯消元)
首先题目给我们限定了 F ( i ) F(i) F(i)的取值范围,对于每个 F ( i ) F(i) F(i),至多有三种选择: f i f_{i} fi f i − 1 f_{i}-1 fi1 f i + 1 f_{i}+1 fi+1
因此我们可以 3 5 3^{5} 35枚举出 F F F函数的值。
这样 F F F函数定了,那现在问题就转换成了知道经过 5 5 5个点的 4 4 4次多项式,求出这个多项式的系数。
这个问题可以用拉格朗日差值法或者高斯消元解决。
具体算法解析请参考OIWiki。
注意一下精度问题就行了,因为我们是用拉格朗日算法构造出来一个多项式去拟合我们给的条件,所以会有精度误差。
第二种做法(比赛时想到的)
我们直接枚举高次的系数,即枚举 a 4 , a 3 , a 2 a4,a3,a2 a4,a3,a2
根据这三个系数我们可以消除一些误差比较大的数据(优化)。
我们知道 G 1 = a 1 + a 0 , G 2 = 2 a 1 + a 0 G_{1}=a_{1}+a_{0},G_{2}=2a_{1}+a_{0} G1=a1+a0,G2=2a1+a0
g i = a 4 ∗ i 4 + a 3 ∗ i 3 + a 2 ∗ i 2 g_{i}=a_{4}*i^{4}+a_{3}*i^{3}+a_{2}*i^{2} gi=a4i4+a3i3+a2i2
因此已知 f 1 , f 2 f1,f2 f1,f2时, a 1 a_{1} a1的取值至多有五种
[ ( f 2 − g 2 ) − ( f 1 − g 1 ) − 2 , ( f 2 − g 2 ) − ( f 1 − g 1 ) + 2 ] [(f_{2}-g_{2})-(f_{1}-g_{1})-2,(f_{2}-g_{2})-(f_{1}-g_{1})+2] [(f2g2)(f1g1)2,(f2g2)(f1

你可能感兴趣的:(组队赛,算法)