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

参考代码

全部评论

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务