D
给定正整数
,令 ,求 的所有非空子集的元素按位或的结果有多少不同取值
首先有
设
考虑比
设
第
位为只能使用
的元素,设 ,或的结果(或闭包)显然包含又由于
所以或闭包中所有元素均 ,且 中所有数值可能为 的位只有 位,于是结果的每个数中,值为 的为是这些位的子集,所以它们综上,
就是 的或闭包,共 个第
位为首先,
的或闭包中,考虑第 位为 的元素,和上面类似可知是 而它们的或闭包是 ,即 的子集,于是剩下的元素只有考虑「或闭包」在这个区间中的表现
注意此时不能使用
中的元素于是,只需要考虑
中的元素,而这是原问题的一个子问题。从而,我们把 和 相同的位删掉 —— 即找到 中除了 外最高为 的位,记为它们的或闭包就是
,这部分的贡献就是综上,该部分答案就是
1 | int b, d; ll L, R; |
E
数轴上有
个点,每个点初始时在位置 ,以 的速度向数轴正方向前进。 初始时刻,选择一些点为其染色,之后的行走过程中,染色的点会将其碰到的所有点都染上色,之后被染上色的点亦是如。此
在所有种初始染色方案中,问有多少种初始染色方案,能使得最终所有的点都被染色
按
考虑初始时最靠右的标记点
设
考虑用
对于
1 | const int N=2e5+100; |
F
定义
是对 进行 算法需要的步数。其中 ; ; 若 ,则 。 有多次询问,每次给定 求出 以及
只会打表找结论,具体的数学过程参见yhx的博客
结论
: ,且不存在结论
:
定义一个二元组 是好的,当且仅当 不存在 满足 $if(x,y)$ 一个二元组
是优秀的,当且仅当 ,其中那么:一个好的二元组进行一次
后一定变为一个优秀二元组,反证法易得
预处理所有优秀二元组就好qwq
1 | const int N=110; |
Be the first person to leave a comment!