【bitset 技巧 分块】bzoj5087: polycomp

神仙zq发现了${n^2\sqrt n}\over 32$做法

Description

你有三个系数为0,1的多项式f(x),g(x),h(x)
求f(g(x)) mod h(x)
为方便起见,将答案多项式所有系数对2取模输出即可
如果f(x)=Sigma(Ak * X k)
则f(g(x))=Sigma(Ak(g(x)) K

Input

一共三行,每行一个多项式,分别为f,g,h
对于一个多项式描述为n P0,P1...Pn其中Pi为0或1
多项式P(x)=P 0+P 1*x+....+P n*x n
记n表示多项式最高项的次数,n<=4000

Output

用同样的格式输出答案多项式
如果答案为0,输出0 0

题目分析

陈老师神题x1

观察到这里多项式的所有操作都是在系数$\mod 2$的意义下的,因此可以用bitset来加速多项式的一些操作。例如$O(n^2)$实现多项式取模。

1 void mod(poly &a, int pos)
2 {
3     for (int i=pos; i>=p; i--)
4         if (a[i]) a ^= c<<(i-p), a[i] = 0;  //我第一次居然把标红地方给忘了
5 }

但是如同很多bitset的技巧题一样,非常重要的一点是bitset每次整体操作的复杂度是  $O(size)$  的。

猜你喜欢

转载自www.cnblogs.com/antiquality/p/10507033.html