[关闭]
@happyforever 2018-11-01T14:12:33.000000Z 字数 1056 阅读 535

10.26听课笔记

清北学堂 笔记


image.png

我们发现每一位都是相互独立的。
从大到小枚举每一位,观察是否可以作为最优解,并计算经过扇门后的值,求出最大值即可。
复杂度位数。

image.png

Part1:
从高到低位,尽可能是0就可以了。
由此转化为判定问题
从高到低枚举第位,表示前棵树分成组,第位能否为
枚举上一组末尾的树在位置,满足已得知的条件)
表示前棵树至少分成几组能满足已知条件。
Part2:
仍然从高到低枚举每一位。由于的存在,我们可以令表示前个数在满足条件的情况下最少分为几组。
因此复杂度降为位数。

image.png

最朴素的想法
从高到低枚举每一位,统计这一位有多少二元组是
考虑枚举位数,我们要求的是该位为的方案对数是否是奇数
考虑的第位是否是,我们可以先将都对取模。

定义:
当表达式为真时,,否则

那么有
接下来就相当于有位数个限制,求满足每个限制的对数。
对于每个限制,我们可以将进行排序,那么就可以用Two Point时间内求出答案了。
至此,总复杂度为位数,仍然通过不了本题。

容易发现该复杂度的瓶颈在于排序的复杂度。
我们可以将位从高到低枚举,这样每次在对取模后,都会分为两堆数,其中一堆是需要减去的,另一堆是不需要的,而这两堆都是单独排好序的,因此可以通过归并排序在时间内排序完毕。
总复杂度为位数。

image.png

我们要证明,对于类似image.png的一张图,如果蓝色能越过,那黑色也一定能跳
可以反证出,大一点的数一定跳不过小一点的数。所以要尽可能跳到小一点的数上。所以要预处理出表示能跳到哪里。
所以问题就转化成了求。所以实际问题就是,对于每个,枚举所有的素数。
枚举这个素数,假设是都能更新跳到的位置一定小于等于能跳到的位置。
跳到的位置一定小于能跳到的位置。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注