那道人类智慧题咕掉了……

求和太简单了,就 8 写了

链上二次求和

给出一个长度为的整数序列,有次操作,要求支持区间加,询问

线段树

首先有一个小差分。

如果这个序列是一个环,那么答案就很好求。断成链之后,有些区间就不能统计到。对于长度为的区间,那么会少统计次,少统计次……,少统计次。同理,少统计次,少统计次,以此类推。

那么对于长度小于等于的区间,则系数就是,也就是的前缀和。只要能快速维护带系数的区间和即可。那么使用线段树维护,也就转化为,快速求出这两个序列的区间和。其中的很好求,而可以求出前缀和公式,当然也可以预处理。

然后还需要把给转化为,那么这个可以用来辅助计算。处理一下细节即可。

时间复杂度

代码

治疗之雨

给你个数,第一个数值为,有上界和下界,其他个数值为,没有上界也没有下界。

你每次会进行如下操作:

  1. 等概率随机选择一个没有达到上界的数并把它。如果没有就不操作。
  2. 进行次:等概率随机选择一个没有达到下界的数并把它,如果没有就不操作。

问期望进行多少次操作后第一个数会达到下界。如果第一个数无法达到下界输出

高斯消元 期望 卡常 海森堡矩阵

表示第一个数值为时的期望。在一个回合,它有概率,也有概率。设表示一回合减的概率,易得

(若

另一方面,设表示第一个数值为时,一回合就达到下界的概率。容易发现

那么现在就可以容易地得到的关系式:

特殊地,

不妨把去掉,得到

特殊地,

这时容易想到高斯消元。而是一个海森堡矩阵,可以使用一些技巧做到

注意要特判的情况。

代码

染色

给一个无重边自环的无向图, 每个点分别给了一个大小为的颜色集合,你只能从这个集合中选一种颜色给这个点染色。要求没有两个相邻的点被染了相同的颜色。

求是否无论给定的颜色集合是什么,均有办法按照要求染色。Yes or no。

构造 图论 盲猜

如果不是二分图那么显然是 NO。

考虑给你一个环,那么你可以构造来钦定必须选颜色。因为如果的话会和冲突。长度更大的环同理。

既然我们能钦定一个点的颜色,那么只要存在一个环与的环共边数小于等于,就意味着我们可以构造出 NO 的情况了。这里要注意,如果有一条共边,仍然是可以构造出 NO 的。

因此总结一下,判定方式如下:

  1. 如果不是二分图,则 NO;
  2. 删掉所有的 1 度点(拓扑)后,如果存在某个点不在任何一个简单环上,则 NO;
  3. 如果存在某个点度数大于,则 NO;
  4. 如果存在两个相邻的度点,则 NO;
  5. 如果都没有,那么就是 YES。

由于使用了一些 STL 数据结构,因此我实现的时间复杂度是

代码

二进制

若一个 01 串能在任意重排后变成一个 3 的倍数的数的二进制表示(可含前导 0),称这是好的。比如 101,000,11 都是好串。

现在给你一个长度为的 01 串,要求支持次操作:

  • 单点修改
  • 询问满足中有多少个好串。

分类讨论

容易发现,满足以下任意一个条件的都是好串:

  1. 有偶数个 1。
  2. 有奇数个 1,且有至少 3 个 1 和至少 2 个 0。

这个不好算,我们考虑计算不是好串的串的个数,那么不是好串的串就是:

  1. 有 1 个 1,有任意个 0;
  2. 有奇数个 1,没有 0;
  3. 有奇数个 1,1 个 0。

上述三者有一部分算重了,因此要减去

  1. 只有 1 个 1,没有 0;
  2. 只有 1 个 1,1 个 0。

的个数。

这 5 个都可以简单地使用数据结构维护。

使用 set+ 树状数组实现,时间复杂度

代码