CF1610D Not Quite Lee
题意:
定义一个序列是好的当且仅当存在n个序列m,使得长度为的连续数列,且, 问一个序列a的所有非空子序列中,有多少个序列是好的
题解:
奇数 可以构造为, sum为0, sum取值可以是
偶数 必然会造成n的残留, sum取值可以是
二进制下考虑, 会造成的残留
每个是可以取任意多数的,且正负任取,由辗转相除法可得,通过任意的的加减,可以得到两数中的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分类后计数即可
参考代码