Day1
T1 建筑装饰4
不难想到暴力dp
\(f[i][0/1][j]\)表示当前插入了\(i\)个数,末尾是A/B,有\(j\)个A中的数是否可行
暴力转移时间复杂度\(O(n^2)\)
尝试压状态
打表发现dp值可行的j是连续段
时间复杂度变为\(O(n)\)
T2 汉堡肉
据说正解是分类讨论+线段树优化建图+2sat?
写的比较流行的随机化
random_shuffle后取前四个矩形分别作为四个点的范围
然后依次加入矩形,判断与当前四个矩形哪个交集大就与哪个合并在一起
玄学可过
T3 扫除
神仙数据结构
先考虑没有插入的情况
注意H或者V操作只会对某一维造成影响
想到对每一维分开搞
但是H操作和F操作会有相互影响
举个例子
假设你当前有一个H操作要横着推
但是有一个覆盖范围很短但是推得距离很长的F操作竖着推走了你H操作要推的一部分灰尘
这个时候你的H操作的覆盖范围就会改变,是一个区间取max的操作
于是我们可以维护出所有H和F操作在自己一维坐标的覆盖范围
发现所有的区间要么不交要么共左端点
于是就可以两维分开处理按覆盖长度排序倒序加入取max就好了
如果要动态插入直接线段树分治解决就好了
Day2
T1 交互题先咕着
T2 有趣的 Joitter 交友
set启发式合并
维护一个点的出入,所在连通块的出入和点集
插入一组关系就可以在set里查一下是否会产生新关系
总添加数量是\(O(n)\)的复杂度有保障
分类讨论有点繁琐
T3 遗迹
今晚做