今天重新做了一下NOIP原题,当时啥也不会,就直接输出0,搞了10分,今天看看撑死也就30,50了,用了网上的一种hash法勉强搞到70分,AC的还未看懂,下面给个标准的题解吧,争取早日理解。
30% : 穷举x,判断等式是否成立。
50% : 在30%的做法中加入高精度乘法,加法。不用高精减的原因是,只要把符号相同的项移到等式一边,最后再计算等式两边数值是否相等。同时记得要写秦九韶(霍纳法则)优化。
70% : 根据同余的性质,同余符号两边可以支持同加一个数,同乘一个数。那么可以对等式两边同时对一个数取模,如果同余符号成立,那么原等式有可能成立,反之则筛掉该x。在实际操作时对ai用一个素数取模,然后再穷举x,一边取mod一边运算。于是就可以把单次检验复杂度降为O(n)
复杂度 : O(nm)
100% : 根据二项式定理,f(x+p)在展开后必然可以整理成f(x)+T,其中T为关于p的一个多项式,而在同余(mod p)的环境下,T是可以忽略的,也就是说,那么事实上f(x) mod p就是在[1,m]上的周期函数,那么我们只要预处理出f(0)~f(p-1),就相当于知道了f(x) mod p在该区间上的全部情况。于是我们对上述算法优化,从选一个质数改为选取多个小质数pi进行验证,对每一个pi进行0~(pi-1)的预处理后,就可以筛掉一些x。最后输出剩下的x。
复杂度 : O(+m)
时间: 2024-10-25 02:33:52