CF1610D Not Quite Lee

题意:

定义一个序列b0...bnb_0...b_n是好的当且仅当存在n个序列m,使得mim_i长度为bib_i的连续数列,且i=0nj=0bimij==0\sum_{i=0}^{n}\sum_{j=0}^{b_i}m_{ij} == 0, 问一个序列a的所有非空子序列中,有多少个序列是好的

题解:

奇数2n+12 * n+1 可以构造为n...0...n-n...0...n, sum为0, sum取值可以是xbix * b_i

偶数2n2 * n 必然会造成n的残留, sum取值可以是xbi+nx * b_i + n

二进制下考虑,1010010100 会造成0101001010的残留

每个bib_i是可以取任意多数的,且正负任取,由辗转相除法可得,通过任意的的加减,可以得到两数中的gcd。

如果两个数的lowbit相同,那么他们的gcd至少也是lowbit,是无法去清除残留的

而如果lowbit至少相差1,也就是 a > b, lowbit(a) > lowbit(b), 此时,d = gcd(a, b), a的残留为a / 2, d为a / x, x >= 2, 此时,可以使用d去消除残留

综上,按lowbit分类后计数即可

参考代码

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务