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分类后计数即可

参考代码

全部评论

相关推荐

11-24 11:23
门头沟学院 C++
点赞 评论 收藏
分享
牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
11-22 16:49
已编辑
北京邮电大学 Java
美团 质效,测开 n*15.5
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务