luogu P9120 [春季测试 2023] 密码锁
题目中明摆着让你对 不同的情况讨论,并且难度应该是递增的。
Section 1:
应该不用我教你怎么做吧
Section 2:
最大值最小下意识二分转化成判定问题。
你会发现最大值和最小值如果放不同的行不会比放在同一行更优,因此钦定最大值在第一行,最小值在第二行,然后把每个密码锁的两种状态看看能不能合法地放进去即可。时间复杂度 。
Section 3:
钦定最大值在第一行,枚举最小值在哪一行,然后我们还剩下一行。
对于一个密码锁,如果其在最大值和最小值的那一行都合法,那么会对剩下的一行产生限制,限制为一段线段。而我们要求的就是所有密码锁的三个限制的并有没有交点,容易扫描线解决。时间复杂度 。
Section 4:
前面都仿照 ,然后我们发现我们的限制变成了一车矩形。
线段之间可以直接合并,矩形不行。考虑容斥就可以合并,然后扫描线+线段树,时间复杂度 。
这有亿点点卡常。观察发现因为我们对原问题扫描线,因此就变成线段问题,还可以按照 的做法去做,时间复杂度 ,应该就不卡常了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2022-03-19 luogu P4770 [NOI2018] 你的名字
2022-03-19 CF710F String Set Queries
2021-03-19 luogu P4248 [AHOI2013]差异