ARC084D XorShift
题意 :有
当
当
求最终有多少个
将给出的数看做
两个操作分别对应 “乘
利用这两个操作,可以构造出多项式
具体地,求
则有
显然,这样的转化每次都会使得
记
于是问题转化为:
有多少个多项式
满足下列条件: 是 的倍数。 转化为二进制数后 。
根据数位
- 钦定前面的若干高位,其余低位随意。
记
不难证明,若我们钦定了
- 具体方法:记被钦定的部分为
,在低位填上 。
于是,若询问中钦定了前
若
,方案数为 。 若
,这些询问的前 位都是相同的(与 相同),只需处理一次。(补全后判定是否 )
利用 std::bitset
,
于是总复杂度为