民意调查
idea from skip2004, solution, data from he_____he.
算法一
我会暴力!枚举所有子集并计算平均数和中位数,复杂度
算法二
先把整个序列从小到大排序。将子集看为一个排序后序列的子序列
这样就可以枚举中位数在序列中的位置,再枚举
时间复杂度
算法三
注意到每次的背包一定是一个前缀和一个后缀,所以我们可以预处理出每个前缀和每个后缀的背包并对一边做前缀和。这样每次枚举完中位数和
时间复杂度
算法四
注意到我们可以以从前到后的顺序枚举中位数,这时对于前缀的背包就可以自然地每次加入一个数,而不用保留之前那些前缀的背包。
对于后缀的背包,我们可以先处理出所有数的背包,每次从前到后扫中位数时,将一个数从背包中移出,就可以得到当前想要求出的后缀的背包了。
时间复杂度仍为
地铁规划
from wlzhouzhuan.
算法一
对于每个左端点,暴力扫右端点直至 check
为零,然后 undo
回去即可。
操作次数
算法二
由于可撤销 dsu 能撤销最近一次的操作,而我们需要撤销最远一次的操作,不难想到采用一种“双栈结构”来维护它。
具体地,我们加入 dsu 的边可以用一个栈维护。其中已经翻转过的边用 0
表示,未翻转过的边用 1
表示。我们只要时刻保证栈顶为 0
边即可直接进行 undo
操作。
对于当前左端点的查询,它会使得栈顶加入若干个 1
边。考虑暴力弹栈顶直至弹出来的 0
边和 1
边数量相等,然后把 1
边按原顺序加回栈,再把 0
边按原顺序加回栈,这样就满足栈顶为 0
边,可以直接 undo
了。特殊情况是把栈弹空了仍然不满足 0
边和 1
边数量相等,此时如果栈中压根没有 0
边,我们就把所有 1
边倒着加回栈中,这样所有 1
边变成了 0
边;否则我们仍按照上述方式加回栈中即可。
出题人只会把它卡到根号量级,可以通过前两个子任务,期望得分
算法三
subtask2 的根号做法、不会证操作次数的乱搞做法以及单
算法四
结合二进制位去考虑该问题。
我们每次额外加一个计数器 0
边)。
- 如果栈的头未被
过,则一直弹,然后再弹 个 过的边; - 如果栈的头被
过,啥事都不干。
执行完上述流程后,可以发现栈一定 undo
,并 top--
即可。
考虑分析该做法的复杂度。
我们定义一个点的位前进表示它在未
对于未被
对于已被 top=1010000
,则 top--
后末尾的位均被摊成了 top=1001111
),所以它至多进行
因此
国王出游
from ezoilearner.
算法一
答案即为
令
注意到
令
所以问题变成了快速计算
可以通过子任务 1,期望得分
算法二
在满足
令
由于两维独立,将上式展开,答案可写为
因为有
所以我们可以使用多项式快速幂即可在
可以通过子任务 2,结合算法一可以得到
算法三
此时考虑
我们需要对于
使用扩展拉格朗日反演,令
则有
注意到
时间复杂度
算法四
考虑只有
此时有
定义
使用扩展拉格朗日反演,有
时间复杂度
算法五
我们已经解决了
注意到
现在就有
时间复杂度