eJOI 2018
eJOI 2018
按照做题顺序(也许是难度顺序)写题解。
[eJOI2018] 山
首先有以下显然的性质:
- 建造的房子互不相邻。
- 不会对房子进行操作。
- 每一座房子只会影响相邻的山的高度。
由性质三可以设计一个简单的 DP。\(f_{i,j,k}\) 表示考虑到 \(i\),已建造 \(j\) 座房子,最后一座房子距离 \(i\) 为 \(k\)。当距离大于 \(2\) 时计入 \(f_{i,j,2}\)。转移是很简单的。复杂度 \(O(n^2)\)。
[eJOI2018] 元素周期表
这题乍一看很难下手,那么可以先考虑能得出所有元素的充要条件,发现还是不会做。于是考察特殊情形,一种显然合法的情况是第一行和第一列元素全都有了。然后猜想最终可以找到一个格子使得这一行和这一列的所有元素要么在开始就存在,要么可以添加进来。
这时候想到一个二分图模型:每一行和每一列视作一个点,一个格子存在相当于所在行和列连通,这时候发现不用管上面的思考过程了,答案就是连通块个数 \(-1\)。直接并查集维护连通性就行。
[eJOI2018] 循环排序
搞错两次题意,还以为这题多难呢...排列很经典,每个置换环做一次操作很显然是操作点数下界。
但是我们要求的是操作次数最少,很明显可以 \(k\) 次操作把 \(k\) 个置换环连到一起,但是这时候需要考虑一下 \(s\) 的限制,然后就做完了。
对于一般情况可以直接把 \(a\) 相同的点整到一个置换环上去,也做完了。不觉得这题有上一题难。
[eJOI2018] AB 串
细节题,感觉也不是很有意思,不写了。
[eJOI2018] 护照
首先猜一手状压,然后就可以想到求出 \(f_S\) 即 \(S\) 集合签完护照的最早时间。先想一下如果求完了怎么做,可以记录转移过程然后得到方案。
然后想一下怎么求。考虑扩展一个护照,那么要从 \(f_S\) 之后连续 \(t\) 个空闲的日子开始。似乎没那么简单。考虑一下转移的过程,实际上是枚举后面空闲的日子段,判一下是不是满足条件。注意到 \(t\) 越大,限制就越紧,所以对于一个 \(S\) 转移出去的集合可以只枚举一次。然后就做到 \(O(n2^n)\) 了。
写的时候有些地方没想清楚,写了一个下午,难过啊。
[eJOI2018] 互素树
提答题,以后再做吧。