初中二次函数题最有用的一集。
将 f(x)=ax+b 展开,我们可以得到以下的式子:
i=1∑n(di×a+b−vi)2
这个东西在 b 取任意一个值的时候,都是一个关于 a 的二次函数:
i=1∑ndi2a2+2(b−vi)di×a+(b−vi)2
这个函数的二次项始终为正数,于是当 a 取对称轴时函数取到最小值:
a=∑i=1ndi2∑i=1n(vi−b)di(i=1∑ndi2)(∑i=1ndi2∑i=1n(vi−b)di)2+2(i=1∑n(b−vi)di)(∑i=1ndi2∑i=1n(vi−b)di)+(i=1∑n(b−vi)2)∑i=1ndi2(∑i=1nvidi)2−2(∑i=1nvidi)(b∑i=1ndi)+b2(∑i=1ndi)2+2(bi=1∑ndi−i=1∑nvidi)(∑i=1ndi2∑i=1nvidi−b∑i=1ndi)+(i=1∑nb2−2bvi+vi2)svd=i=1∑nvidi,sd=i=1∑ndi,sd2=i=1∑ndi2,sv=i=1∑nvi,sv2=i=1∑nvi2nb2−2sv×b+sv2−sd2b2×sd2−2svd×sd×b+svd2(n−sd2sd2)b2+2(sd2svd×sd−sv)b+sv2−sd2svd2
代入后得到了一个只与 b 有关的二次函数。然后我们需要判断 n−sd2sd2 的正负性,但是这是容易证明一定 ≥0 的。
n−sd2sd2≥0n≥sd2sd2nsd2≥sd2ni=1∑ndi2≥(i=1∑ndi)2ni=1∑ndi2≥1≤i,j≤n∑didj(n−1)i=1∑ndi2≥1≤i,j≤n,i=j∑didj1≤i,j≤n,i=j∑ndi2−1≤i,j≤n,i=j∑didj≥01≤i,j≤n,i=j∑ndi2−didj≥01≤i<j≤n∑ndi2+dj2−2didj≥0
而对于任意两个正整数 x,y 都显然有 x2+y2≥2xy((x−y)2≥0),于是结论成立。又因为题目保证 n−sd2sd2>0,所以不会出现除 0 的情况,b 取对称轴时函数取到最小值。
b=n−sd2sd2sv−sd2svd×sdsv2−sd2svd2−n−sd2sd2(sv−sd2svd×sd)2sv2−sd2svd2−n−sd2sd2sv2−2svsd2svd×sd+(sd2svd×sd)2sv2−sd2svd2−(n−sd2sd2sv2−2n−sd2sd2sd2sdsv×svd+n−sd2sd2(sd2sd)2svd2)sv2−sd2svd2−n−sd2sd2(sd2sd)2svd2−n−sd2sd2sv2+2n−sd2sd2sd2sdsv×svd
于是我们得到了,对于一个固定的 v,代价的最小值是这么一坨东西。而 sd,sd2 都是已知的,所以只需要求出 sv2,svd2,sv2,sv×svd 的期望即可。代入第一个 v 固定的样例,虽然中间涉及到的数很大,但是最后答案是 0,和样例输出相符合!
具体怎么求呢?先考虑 sv2。根据期望的线性性,显然有:
sv2=i=1∑nri−li+1S2(li,ri)
直接计算即可。
考虑设状态 fi,0/1/2/3/4 分别表示 sv,svd,sv2,sv×svd,svd2 只考虑前 i 项的期望,可以推导出转移方程:
fi,0=fi−1,0+2li+rifi,1=fi−1,1+di2li+rifi,2=fi−1,2+(li+ri)fi−1,0+ri−li+1S2(li,ri)fi,3=fi−1,3+2li+rifi−1,1+di2li+rifi−1,0+diri−li+1S2(li,ri)fi,4=fi−1,4+di(li+ri)fi−1,1+di2ri−li+1S2(li,ri)
然后可以 O(n) 递推,但是计算逆元需要 O(nlogmod)。这题就做完了。
对着式子写就能过的题,应该不会有人要代码吧?