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)\)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探