「题解」Codeforces 449D Jzzhu and Numbers

实际上就是个位运算卷积的背包,只需要每个 (F_i=x^{a_i}+x^{U}) 位运算卷积卷起来即可((U) 是全集),如果直接暴力把每个 (F) 都卷起来是 GG 的,注意到这个做 FMT 也就是后缀和,所有位置不是 (1) 就是 (2),或者说只有 (a_i) 的前缀是 (2),其他都是 (1)

所以 (prod FMT(F_i)) 的每个位置都是一个 (2) 的次幂,而指数就是有多少个 (a_i) 的前缀包含它。

那么对 (a) 开个桶做一个高维后缀和,每个位置就是 (prod FMT(F_i)) 每个位置的指数,求出 (prod FMT(F_i))(IFMT) 回去。

code

原文地址:https://www.cnblogs.com/do-while-true/p/15321791.html