JOISC 2017 题解
1|0JOISC 2017
loj 上有几乎全部的题目,写了题意的就是 loj 上没有的。
1|1D1T1
开场放大。
首先,对于一个点,它最后覆盖的一定是一个矩形,这就意味着如果我们知道了
考虑
于是我们尝试只枚举
继续考虑优化。我们做了
我们发现,我们覆盖的行的
进一步地,我们发现有用的
1|2D1T2
只会 KDT 优化建图的小丑。
好像建边可以优化。我们发现我们连边类似一个区间的形式。具体地,我们对于维护一个并查集和每个点所在段的右端点,遇到右端点就把左端点和左端点 +1 合并,然后把中间的一整段和当前点连边,再把整段拓展至当前最右侧。最后把跑一遍二分图染色求出连通块数就是答案。
1|3D1T3
显然可以先二分答案,关键是怎么判断是否合法。
有十分高妙的判定方法。首先,根据贪心,如果一个人会把另一个人点燃,那么这一个区间中的人都会被这个人点燃。因此,两个点
判定分为两步。先从
1|4D2T1
很厉害的题目。
把题意稍微转化一下,就是给你若干区间,你要可以选择一些区间反转,要求最小化被覆盖的次数最大的位置的覆盖次数。
第一步肯定是二分答案,关键是怎么判定合法。
首先有一个小观察,我们选择反转的区间的交集一定不为空,以为如果为空的话那么反转后不仅原来的区间被覆盖次数不变,其他位置的覆盖次数会增加,一定不优。
于是我们就可以选择任意一个在被反转区间的交集中的位置
然后考虑能不能去掉枚举
现在有结论:
证明:设反转区间的交是
因为
我们再考虑能不能去掉枚举
同样有结论:
证明:对于不在反转区间交中的位置
于是我们任取一个
1|5D2T2
题意:Alice 有一个数 X,她可以向 Bob 传一个长度不超过 150 的 01 串,但是其中有
思路:随机化好题。
考虑把原序列每两个为一段,然后用三进制数来表示,这样最多可以传
考虑随机化。我们把两个人手上的序列随机打乱,这样就可以有更多的位置来用。但是还是过不去。
考虑怎么优化。假设一个段只有一个位置可以用,而且刚好可以表示出我们要表示的数,这样就可以利用上非法位置。加上优化后就可以通过了。
其实还可以再优化,就是把三进制下每一位再随机一次。
1|6D2T3
想到了大致方向。
首先可以暴力让每个点向两侧第一个不小于它的点连边,然后可以暴力跑 bfs。
考虑优化。对于每个点,我们肯定是尽可能地往远走,而每一次只有两种选择,那么可以倍增,于是可以求出每个点往远能走多远。对于询问,先从左端点往右跳,再从右端点往左跳即可。
1|7D3T1
推出了最终会选择一些区间的性质,感觉可以
考虑
设
- 不把
赶下车,那么留下来需要喝 次水,转移是 ; - 把
赶下车,那么我们枚举赶下车的一段人 ,那么我们需要知道这些人最早可以在第几轮被赶下车,记为 ,那么有 ,转移就是 。
考虑怎么优化后一种转移。我们发现这就是斜率优化的形式,不过
1|8D3T2
想到了求每个点能走到的范围和如何判断能不能走某条边,但是没想到直接记搜就是对的。
我们先求出每个点可以走的范围。我们从一个点开始,先往两边拓展,能走就继续搜下去,然后把自己能到的范围和自己能到的点的范围取并,可以证明复杂度是对的。
1|9D3T3
从部分分开始想到了大概。
从链的部分分入手。我们尝试去确定 dfn 序,那么我们就需要比较两个点的 dfn 序大小关系,即一个点能否在不经过另一个点的情况下到达 0,这个可以用一次询问求出,于是就可以直接排序。
然后是深度不超过 9 的树的部分分。
我们先确定每个点的深度。我们维护当前深度不超过
接着考虑怎么确定每个点的父亲。我们把同一层的点重标号,然后对于下一层的点,可以二分找到这个点的父亲在重标号后是谁,那么就可以
接着是树的部分分。
我们还是尝试维护一个包含 0 的连通块。那么我们随便找一个点,然后二分找出这个点到根的路径上编号最小的点,然后从这个点再开始找点,直到这个点和一个连通块中的点直接相连,然后就可以求出这个点的父亲边。
最后是正解。
其实和树的部分很像,同样是维护联通块,然后可以求出一棵 dfs 树,那么就可以在树上二分找出这个点的所有返祖边,这样就可以确定所有的边。
1|10D4T1
又是暴搜复杂度正确的题。
我们记
1|11D4T2
题意:通信题。
Alice 有一棵树,最大深度不超过 18,Alice 可以给每个点赋一个
思路:神题,完全不是人能想出来的。
首先肯定是想到传 dfn 和 siz,但是我们只有 28 位,要想办法来压缩。因为 dfn 相对不好压缩,我们考虑怎么压缩 siz。
我们尝试用一个序列去拟合 siz,即我们构造一个序列
然后考虑怎么构造这个序列。我们需要满足
考虑构造等比数列,即
不过等比数列前面部分增长速度慢,可以令
1|12D4T3
计算几何+数据结构
因为所有颜色的点数和是
具体地,假设我们可以
如果
然后考虑怎么求答案。先考虑第一种情况,能做贡献的点就在这个点和线段的端点连的射线之间的部分。
考虑如何计算。
我们把这个点和线段端点连起来,设这个三角形的底角分别是
第二种情况和第一种类似,也可以转成二维数点。
复杂度
最后提一嘴,暴力是可过的。
__EOF__

本文链接:https://www.cnblogs.com/Xttttr/p/18013737.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2023-02-12 NOIP2022游记
2023-02-12 CF1167G题解