csp-s 模拟 9

csp-s模拟9

T1 邻面合并

签到题

注意到 \(m\) 很小,对行的状态进行状压即可。

时间复杂度 \(O(n2^{2m})\)

T2 光线追踪

线段树,cdq

注意到一个矩形有贡献的直线只有最左侧与 \(y\) 轴平行的边,以及最下面与 \(x\) 轴平行的边,可以分开计算然后合并。以与 \(y\) 轴平行的边为例,将其描述为 \((x_0,y_0,y_1)\) ,设能经过它的直线的斜率为 \(k\),则满足 \(y_0≤kx_0≤y_1\)\(x_0\) 除到两边去将两边,现在就可用线段树去维护了,但是涉及到精度不太好写,可以考虑 cdq 但会多一个 \(log\)。注意特判斜率为 \(0\) 的情况。

T3 百鸽笼

容斥,GF,多项式

不会。

T4 滑稽树下你和我

二分,计算几何

答案显然就有单调性,可以二分答案。

考虑怎么检查二分值是否合法,注意到 n 比较小,可以直接设计状态 \(f_{i,j}\) 表示是否存在一种方式能使一个人从 \(stx\)\(i\),另一个人从 \(sty\)\(j\)。考虑如何转移,sub4 显然是能直接计算点点距离一个人走一步的转移,但是本题算入了人在边上的影响,就不太好转移了。

因为最终两点都是在叶子上的,猜测边的影响其实跟点有关,所以可以将边作为转移的一个过渡态,即将边视为一个点将其加入状态的集合。

编不动了 ... 直接使用人类智慧,将边视为一个点,将其作为一个过渡状态(并不是说在边上就不动了,而是钦定一个人在边上)加入总状态的集合,依旧一人走一步的转移就好了。现在只需要讨论点边距和边边距就好了。

边边距:只要有前驱的点点距和点边距合法,则边边距一定合法,因为边边距就包含了所有的点点距和边边距。

点边距:考虑两个人所在的线段,将一条线段放平,则另一条线段呈单调的状态。而点边距只能由点点距和边边距转移而来,先讨论由点点距转移而来的情况,因为点点距是合法的,所以点边距一定也是合法的,因为点点距也算是一种点边距,再讨论边边距转移而来的情况,判断点到另外一条边的最短距离是否合法即可,因为一定存在一个(最短)边边距小于点边距,而这个边边距一定合法,证明考虑上述单调性,所以由这个最短的边边距到点边距一定是单调递增的。同理可以考虑点边距转移到点点距只需考虑点点距是否合法即可。

时间复杂度 \(O(n^2logV)\)

p

posted @ 2024-10-09 21:40  Qyun  阅读(45)  评论(3编辑  收藏  举报