像潮落潮涌,送我奔向自由。|

寂静的海底

园龄:3年2个月粉丝:59关注:15

【题解】CF1808E3 容斥 二项式反演 式子

whk 的时候想到的 O(logk) 做法,很带劲,建议加强到 1018

考虑因为不好计算 具体是哪个元素满足 2xS(modk),所以考虑统计全都不满足的序列然后减去。

k=1n=1 时问题平凡,后文假设 k>1,n>1

i. k1(mod2)

枚举 和 S 后有唯一的 x 使得 2xS(modk)

现在要求不存在任何 x 且和为 S 的情况。

然后用一个容斥来计算(钦定 x 个不满足,全都满足)

f(i) 为钦定 ix 的方案数,答案为 i=1n(1)if(i)f(i)=(ni)kni1(xn), 因为无论前面的和是多少,最后一位都可以选择某个唯一的数使得答案是 S,所以原式可以化为

i=1n1(1)i(ni)kni1+(1)nf(n)=1k((k1)n(1)n)+(1)nf(n)

使用二项式定理处理求和,补上一个 (1)n

所有 S 的不符合的方案数之和就是

(k1)n(1)n+(1)ns=0k1fs(n)

其中 fs(x) 表示和为 s 且钦定全放 x 的方案数等于 [nxS(modk)]=[(n2)S(modk)]

所以 s=0k1fs(n)=gcd(k,n2)

整理得答案等于 kn(k1)n+(1)n(1)ngcd(k,n2)

ii.k0(mod2)

此时对于所有的奇数 S 一定不合法,考虑从 kn2 中减去不合法且 S 是偶数的方案数。

对于偶数 S,有且仅有 x1=S2,x2=S+k2 被禁止。

f(i) 为钦定 ix1x2 的方案数

i=1n1(1)i(ni)2ikni1+(1)nf(n)=1k((k2)n(2)n)+(1)nf(n)

所有 S 的不符合的方案数之和就是

12((k2)n(2)n)+(1)ns=0k1fs(n)

其中 fs(n)nx1x2 和为 S 的方案数。

假设有 cx1ncx2,那么要求

c=0n[cx1+(nc)x2S(modk)](nc)

其中

cx1+(nc)x2S(modk)k2c+S2nSk2c(2n)S2

仅当 (2n)S0(mod)k2 时,才有 c=2n1,否则 c=0,因为这相当于限制了组合数下指标的奇偶性,然后求和,所以答案总是等于 2n1

那么有

fs(n)=2n1[(2n)S0(modk2)]

那么

s=2t,0<2t<kfs(n)=s=2t,0<2t<k2n1[(2n)S0(modk2)]=2n1gcd(n2,k2)

整理得答案为

12(kn(k2)n+(2)n)+(1)n2n1gcd(n2,k2)

时间复杂度 O(logn),瓶颈在求最大公因数。

posted @   寂静的海底  阅读(8)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起