Loading

题解-AGC012

AGC012B Splatter Painting [*easy]

反着做,对于每个点 \(x\), 记录 \(f(x)\) 表示最大的 \(d\) 使得对 \(x\) 进行了一个长度为 \(d\) 的操作。

然后对于一个操作把和 \(x\) 距离不超过 \(k\) 的点染色,拆分成把他旁边所有距离不超过 \(k - 1\) 的点染色。

如果 \(k \le f(x)\) ,那么不执行操作。

ac link

时间复杂度 \(\Theta(nd)\)

AGC012C Tautonym Puzzle [*medium]

在左边放 \(1...100\),答案是右边的上升子序列个数。

假设空序列也算进答案。考虑从小往大放,放左边子序列个数增加 \(1\),右边子序列个数乘 \(2\)

二进制拆分即可。时间复杂度 \(\Theta(\log n)\)

ac link

AGC012D Colorful Balls [*easy]

考虑两个同色的点都可以和同色最小值交换,那么他们俩可以交换。如果一个点可以和同色的最小值交换,那么把这个点的值视为这个同色最小值。

然后考虑不同色的点,那么如果一个点和其他不同色的点交换 (只需要判其他点的 \(\min\)) ,那么他也能和 能和不同色点交换的点 交换,于是这些点都可以互相交换,组合数学算一下答案即可。

时间复杂度 \(\Theta(n)\)

ac link

AGC012E Camel and Oases [*hard]

对于第 \(i\) 个问题,可以转化为把整个序列拆分成 \(1 + \log v\) 个序列(拆分后可以重新排列序列顺序),使得第 \(1\) 个序列包含了 \(i\),且第 \(i\) 个序列的相邻两点的差 \(\le \frac{v}{2^{i-1}}\)

记录 \(fl_{i, j}\) 表示第 \(j\) 个序列使用在 \(i\) 身上能到达的最小左端点,让 \(fr_{i, j}\) 则为最大右端点。

考虑记录 \(pre_{mask}\) 表示使用了 \(mask\) 中所有二进制位为 \(1\) 的位置已经被使用了的能到达的最大前缀位置,记录 \(suf_{mask}\) 为能到达的最大后缀位置。

答案就如果对于一个位置 \(i\) 满足 \(pre_{mask} \ge fl_{i, 1} - 1\)\(suf_{mask \oplus MAXN} \le fr_{i, 1} + 1\),那么就是可行的。

但是这样是 \(O(nv)\) 的,不能通过。

考虑用第 \(1\) 个序列来把序列分段 (如果相邻两个距离 \(> v\) 就断开),如果段数 \(> \log v + 1\),那么一定不可行。

所以对于每一段判断一下答案可不可行即可。

时间复杂度 \(\Theta((v + n) \log v)\)

ac link

AGC012F Prefix Median

待填坑

posted @ 2021-01-10 22:31  zhoukangyang  阅读(166)  评论(0编辑  收藏  举报