【THUPC2021】鬼街

题意有点绕:一个是监控器监控房子的和是从头开始的和,不只是开始监控后增加的量。
首先一个显然的性质是每个数质因子个数6,预处理出每个数的质因子。
如果一个监控器只管一个数值的话,每个数值维护一个小根堆:里面存监控器。每次判断是否达到最小的监控器阈值。
如果监控的是cnt个数值,每个数值的总和大于sum则一定存在一个数值大于平均值sumcnt
可以利用平均值的性质来优化复杂度,首先算法流程如下:
小根堆按平均值给监控器排序,每次判断如果达到则输出,否则将阈值减去所监控的所有数值,之后将数值清空,将每个数值结合新平均值加入堆中。
复杂度:O(6nlog65nlog2n)
写法:每个值对于不同的监控器清空的量是不同的,这里用del存储,再存一下每个值从开始到当前本身加了多少,取值的时候就差分一下即可。

[THUPC2021] 形式语言与自动机

考虑翻译题意(合法括号序只要满足任何前缀'('>=')'即可),对于"uwv"

  • u任意前缀缩括号后不存在')'
  • v任意后缀缩括号后不存在'('
  • w中')'大于等于u中'('【剩下uw中的'('个数恰好等于v中的')'】

第一个条件即确定了l的范围,第二个条件对于每个r也限定了l的下界。
第三个条件即r+1后缀')'数量大于等于l前缀'('数量。
发现固定了r,计数l本质上是二维数点问题,树状数组我们把它看为近似O(1)的。

[THUPC2021] 游戏

转化为二进制数位dp,要存达到上限的位,转移的时候只需要枚举这部分选的和剩下1的个数乘上组合数即可。
4n被转化为枚举子集3n

[THUPC2021] 混乱邪恶

一维上等概率往左/右随机走一步,走n步所在[kn,kn]的概率极高。