Day1
T1:
给出一个排列
,令
表示所有字典序比
小的排列串成的串,问
本质不同的子串个数,
T2:
给出
个集合,一开始每个集合只有一个数,每次随机合并两个集合,直到只剩下
个
最后的答案
是对这
个集合的贡献求和,每个集合的贡献是
,求
的期望
简要题解:
考虑钦定选一个集合 S,那么它的贡献就是
,乘上存在集合
的概率
显然只与集合的大小有关,于是需要求出
表示 ,最后剩下
个存在
的概率
另外令
表示所有大小为
的集合的贡献和
先考虑
,考虑钦定一个最大值和一个最小值
后面只与
有关,于是转换为求出所有
为某一个定值的所有
的贡献
拆开就可以卷积实现
考虑求
,令
表示把
个合并成一个的方案数,那么显然
那么将
个合并成
个的方案数就是
于是有
意义是把
个集合合并成一个,再把
个集合合并成
个,有序拼接,再除一个总方案数
展开用
优化即可
细节记不太清,希望大家指出错误
大概就是钦定集合,转成集合大小,枚举最大最小组合数算方案,然后算出概率,用卷积优化
T3:给一个矩阵,有
个操作来初始化,给定
将所有与
互质的行的
加上
有
个询问,
表示询问所有与
互质的行的
的和
Day2
T1:你有
条鱼,每条为毒鱼或小鱼,敌方有圣盾鱼和大鱼
任意鱼和圣盾鱼对战后都会将圣盾鱼变成大鱼,只有毒鱼和大鱼对战能杀死大鱼,小鱼对战大鱼无影响
次询问
表示,在对方开始时已经有
条大鱼的情况下,你用
的鱼依次与对方对战,假设有
条圣盾鱼,最大化
使得能全部打完
好像方法很多,线性可以随便做,但还是说一下我的奇葩方法
如果当前是小鱼,那么破盾,如果是毒鱼,那么就杀死大鱼将 ans++
如果没有大鱼,那么毒鱼用来破盾
考虑离线下来做一个前缀,维护每一个
的答案
动态维护剩下多少大鱼,相当于动态维护一个数组,如果是毒鱼就是将为 0 的地方变成 1,将不为 0 的地方减 1 并将答案加 1,否则全部加 1
维护每一个权值的集合,发现只有合并,带权并查集维护
T2:给定 ,p 表示分式的横线长度也就是分式运算的优先级,问 组成的分式的值,
考场打的单调栈,但是有 35 没写怪可惜的
考虑一个数的贡献是本身还是逆元,发现跟单调栈的奇偶性有关,于是可以离线下来,维护每一个
的答案,考虑
的贡献就可以做,就是将据
有奇数段的全部乘逆元,有偶数段的乘本身
这样复杂度是O(段数),只能过随机数据,但类似刚刚的带权并查集对奇数段和偶数段分别维护就可以了
还有一种方法就是建出一个类似线段树的东西查询,同样随便过随机数据,考虑求出一个结点以
为分界点的前缀和后缀的答案,这样一个区间只会在第一个被切开的地方求出答案
考虑一个后缀吧,是由右儿子的后缀和右儿子的全部以及左儿子的后缀组成,后面这个玩意就是将左儿子的后缀全部除一个数,线段树合并即可
还可以对建出的树用广义线段树处理,以后再学(FLAG)
T3:有一个大环顺次连接 边权为 ,令给出 条边,边权为 ,求任意两个点的最小割之和,
显然只会段两条边,枚举两条边,那么最小割就是两条边的权值加上穿过中间的权值,预处理二维前缀和就可以
得到,考虑哪些点对可以以这个最小割为答案,同样是一个矩阵
于是就是矩阵覆盖单点
可以
正解好像是用最小割树,只求
次最小割,只要每次做到
就可以了,但还不是很会(FLAG)