抱灵的第四天四点四十四分
0.闲扯
开题面,发现了“没想到吧今天还是我”的字样,顿感不妙
T1 不断尝试口胡 dp 最终失败/cy
然后就愉快地抱灵啦!!1
1.题解
A
有 \(n\) 个袋子,每个袋子有一个体积和容积,只能放最多一个体积严格小于容积的,问最终会形成多少种不能操作的状态。
将体积和容积从小到大排序,枚举第一个没有放的袋子,也就是说比它小的袋子和能装它的袋子都已经匹配了。按照这个袋子将序列分成两部分,设 \(f_i\) 为左边内部有 \(i\) 条匹配边的方案数,\(g_i\) 同理。那么枚举左右各有多少点未匹配,对答案的贡献为 \(i!f_{l-i}g_{r-i}\),现在考虑如何求出 \(f,g\)。
我们发现(对于 \(f\),\(g\) 同理)从右往左限制会越来越松,可以枚举后缀进行 dp。
B
求一个定义域 \([0,n]\) 值域 \([0,m]\) 的增函数,满足 \(f(a)+f(b)>2f\left(\dfrac{a+b}2\right)\) 且经过的整点最多,输出最多的整点个数。
其实就是要求选出 \(k\) 个向量(整点) \((x_i,y_i)\) 满足 \(\sum x_i\le n,\sum y_i\le m,\gcd(x_i,y_i)=1\),最大化 \(k+1\) 的值。
考虑如何算出多组答案,如果暴力枚举互质向量更新是 \(O(n^4)\) 的。
如何优化这个过程?发现答案在 \(O(n^{2/3})\) 级别,然后更新变成了 \(O(n^{5/3})\)。
选择向量也可以优化:有一个贪心策略是选一个向量必须先选 \(x,y\) 都比它小的向量,且和不超过 \((n,n)\)。可以证明这样只会选出 \(O(n^{2/3})\) 个向量,可以通过本题。
C
给定一个序列,定义六元环是一个满足其中元素有成环的前驱后继(正序反序均可)关系的集合,要求支持单点加和全局六元环计数。
由于要在笛卡尔树上处理一些东西,所以上来就掉线了,后补。
2.杂题选讲
橘皮 of 浙江
Bitset Master
给出一棵树,每个点有一个初始只包含自己的集合,需要支持合并相邻点的集合和查询一个点被哪些集合包含。
一个点 \(u\) 能到达 \(v\) 意味着它们之间存在时间递增的合并操作序列,序列问题考虑点分治,用 dp 求出每个点到分治中心的最早时间,然后按照时间排序,从早到晚扫。
似乎有人找到了一个奇怪的极简做法???
Fast as Ryser
给定一个一般图和常数 \(c\),对于一个匹配 \(S\) 它的权值为 \(c^{|S|}\),求所有匹配的权值和。
在一个匹配中加入一些 \((2i-1,2i)\) 的辅助边后会变成一些不相交的环和路径。因为配对了 \(2i-1\) 和 \(2i\) 所以最多会有 \(O(2^{n/2})\) 个集合。可以先处理出集合内部的方案数再合并信息。
Cyclic Distance
给定一棵有边权的树,找 \(k\) 个点 \(p_i\) 使得 \(\sum\text{dis}(p_i,p_{i\bmod k+1})\) 最大。
咕咕咕咕咕咕咕咕