BJOI 2018 大部分题解
那道人类智慧题咕掉了……
求和太简单了,就 8 写了
链上二次求和
给出一个长度为的整数序列,有次操作,要求支持区间加,询问
。
线段树
首先有一个小差分。
如果这个序列是一个环,那么答案就很好求。断成链之后,有些区间就不能统计到。对于长度为的区间,那么会少统计次,少统计次……,少统计次。同理,少统计次,少统计次,以此类推。
那么对于长度小于等于的区间,则系数就是,也就是的前缀和。只要能快速维护带系数的区间和即可。那么使用线段树维护,也就转化为,快速求出这两个序列的区间和。其中的很好求,而可以求出前缀和公式,当然也可以预处理。
然后还需要把给转化为,那么这个可以用和来辅助计算。处理一下细节即可。
时间复杂度。
治疗之雨
给你个数,第一个数值为,有上界和下界,其他个数值为,没有上界也没有下界。
你每次会进行如下操作:
- 等概率随机选择一个没有达到上界的数并把它。如果没有就不操作。
- 进行次:等概率随机选择一个没有达到下界的数并把它,如果没有就不操作。
问期望进行多少次操作后第一个数会达到下界。如果第一个数无法达到下界输出。
。
高斯消元 期望 卡常 海森堡矩阵
设表示第一个数值为时的期望。在一个回合,它有概率,也有概率。设表示一回合减的概率,易得
(若则)
另一方面,设表示第一个数值为时,一回合就达到下界的概率。容易发现
那么现在就可以容易地得到的关系式:
特殊地,。
不妨把去掉,得到
特殊地,。
这时容易想到高斯消元。而是一个海森堡矩阵,可以使用一些技巧做到。
注意要特判的情况。
染色
给一个无重边自环的无向图, 每个点分别给了一个大小为的颜色集合,你只能从这个集合中选一种颜色给这个点染色。要求没有两个相邻的点被染了相同的颜色。
求是否无论给定的颜色集合是什么,均有办法按照要求染色。Yes or no。
。
构造 图论 盲猜
如果不是二分图那么显然是 NO。
考虑给你一个环,那么你可以构造来钦定必须选颜色。因为如果选的话会和冲突。长度更大的环同理。
既然我们能钦定一个点的颜色,那么只要存在一个环与的环共边数小于等于,就意味着我们可以构造出 NO 的情况了。这里要注意,如果有一条共边,仍然是可以构造出 NO 的。
因此总结一下,判定方式如下:
- 如果不是二分图,则 NO;
- 删掉所有的 1 度点(拓扑)后,如果存在某个点不在任何一个简单环上,则 NO;
- 如果存在某个点度数大于,则 NO;
- 如果存在两个相邻的度点,则 NO;
- 如果都没有,那么就是 YES。
由于使用了一些 STL 数据结构,因此我实现的时间复杂度是。
二进制
若一个 01 串能在任意重排后变成一个 3 的倍数的数的二进制表示(可含前导 0),称这是好的。比如 101,000,11 都是好串。
现在给你一个长度为的 01 串,要求支持次操作:
- 单点修改
- 询问满足的中有多少个好串。
分类讨论
容易发现,满足以下任意一个条件的都是好串:
- 有偶数个 1。
- 有奇数个 1,且有至少 3 个 1 和至少 2 个 0。
这个不好算,我们考虑计算不是好串的串的个数,那么不是好串的串就是:
- 有 1 个 1,有任意个 0;
- 有奇数个 1,没有 0;
- 有奇数个 1,1 个 0。
上述三者有一部分算重了,因此要减去
- 只有 1 个 1,没有 0;
- 只有 1 个 1,1 个 0。
的个数。
这 5 个都可以简单地使用数据结构维护。
使用 set+ 树状数组实现,时间复杂度。
修订记录
- 2021年2月11日 第2次修订
- 2020年4月24日 创建文章