Solution Set -「LGR-126」洛咕咕的 NOIP 模拟赛
机房在三楼, 不在五楼.
三楼确实有阶梯教室.
三楼向外望是一楼大厅屋顶所以看上去不高.
十一点前必须离开科技楼是因为爱因斯坦要锁大门.
我不会被自己写的东西清空 san 值.
我是兔子.
折线
Tag:「水题无 tag」
显然答案 . 若能横向或纵向把点集恰好一刀切成两半, 则答案为 ; 否则若能找到一个右下角或左上角的矩形恰好覆盖点集一半, 则答案为 ; 否则不难构造出 . 判 可以扫描线 + 数据结构二分或者单调指针维护. 复杂度 , 瓶颈可以做到只有排序.
冒泡排序
Tags:「A.DP-计数 DP」「C.性质/结论」
不妨令 .
排列没啥好说的. 对于圆排列, 第一个任务自然是描述给定圆排列 的最小操作次数 .
我们知道, 排列上, 为 的从 开始的最长贪心上升子序列 (LGIS) 长度. 结合这一点, 同时观察样例解释, 我敢打赌, 圆排列上 为 , 从 开始的 LGIS 长度的最小值. 证明不难.
呜... 但这个结论并不能转化出方便的计数情景. 再注意到, LGIS 的最后一项必然是 , 所以直接把 钦定在 , 固定圆排列的同时直接破环为链. 链上问题就好做了, 令 表示用 个数排出任意 LGIS 的方案数. 枚举 个数中最大值的出现位置即可转移. 复杂度 .
动态图连通性 *
Tags:「A.图论-最短路相关」「B.Tricks」
好题, 但为了 拼三大坨暴力真的好难受.
首先转化一下问题, 在离线之后, 我们只需要保留一条 的路径作为最后一条存在的路径. 则这条路径上的边不能 cut, 其他边若存在都能 cut.
什么叫 "最后存在"? 可以发现, 令 为路径上每条边被 cut 的时间排序后的序列, 则 的字典序对应着路径的存在时间关系, 字典序越大, 存在时间越靠后. 我们只需要求出一条 "字典序最长路" 即可.
我们先将所有从未被 cut 的边依次 cut 掉, 这是所有边的 cut 时间互不相同. 则令 cut 时间为 的边的权值为 , 字典序最长就变成路径权值和 reverse 后最小. 这样的权值约定是满足 Dijkstra 的需求性质的. 所以我们可以用 Dijkstra 求最短路, 但还剩下最后一个问题, 如何比较权值呢?
最自然的想法是主席树维护区间 hash 暴力存储权值, 树上二分求二进制最低不同 bit. 一种更优美的方法是在最短路树上求 LCA: 对于两条路径 和 , 由于边权互不相同, 所以 和 上的边权互不相同, 为了比较字典序, 就只需要比较这两条路径的 值大小! 这个比较常数巨大, 所以最好用线段树替代 Dijkstra 中的堆. 复杂度 .
线段 *@
Tags:「A.分治-猫树分治」「B.Tricks」
不知道该评价是好题还是好 trick.
猫树分治, 一个区间的贡献在跨 处统计. 对于取交操作, 若其不完全包含 , 则其会对 产生影响. 讨论若区间跨过 , 则所有线段左端点会向取交区间取 , 右端点类似. 这可以用堆维护 (端点值, 出现次数) 维护. 对于没跨过 的询问, 它会将一些区间丢到更深层的分治区间, 总次数是 的. 一个恶心的地方在于, 我们需要维护没跨 的询问对异侧端点的影响, 这里貌似需要手写堆支持全局取 维护. 总之复杂度就是 .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现