【题解】ARC157 A-D
因为有的题代码没写出来,所以代码就先咕咕咕了。
A.XXYYX
题目分析:
可以发现每一个 XY
必然伴随着出现一次 YX
,当然可能会有一个 XY
没有伴随的 YX
的。
而且若必须存在 XX
和 YY
而不存在 XY
或 YX
的则无解。
所以就根据上述的两个条件判一下就好了。
B.XYYYX
题目分析:
我们设字符串中 \(x\) 的数量为 \(cnt\),则若 \(k > cnt\),最优一定是全部把 \(x\) 变成 \(y\) 之后然后再删除 \(y\),否则最优一定是只是将 \(x\) 变成 \(y\)。
考虑分类讨论。
若 \(k > cnt\):那么我们最优的删除 \(y\) 的办法肯定是每次删除一段最长的 \(y\),因为每当我们删除一段的时候,第一个删除的数造成 \(2\) 的代价以后的数造成 \(1\) 的代价,所以要尽可能少出现 \(2\) 的代价。
若 \(k \le cnt\):那么我们的最优的添加一定是每次添加一段最短的 \(x\),因为每次添加完一段 \(x\),最后一个添加的会造成 \(2\) 的贡献。
C.YY Square
题目分析:
显然需要将平方的代价化简一下,假设某一条路径有 \(x\) 对连续的 y
,那么多了一个 \(y\) 后贡献就是 \(x^2 \to x^2 + 2 \times x + 1\)。
考虑如果所有的路径放在一起维护,\(x^2\) 就是原来的答案,\(2 \times x\) 就是路径长度的和,\(1\) 就是路径条数。
所以只要维护好了这些信息就可以轻松地做到多一个 \(y\) 的贡献,当然如果是没了 \(y\) 贡献就更简单了,就是 \(0\)。
那么就直接 \(bfs\) 一遍这个网格图,然后维护一下就好了。
D.YY Garden
题目分析:
(典型的看了题解就会,自己做就是不会)
这个题其实就是几个关键的性质,下面假设 \(h\) 为用了多少行栅栏,\(w\) 为用了多少列栅栏。
性质一: 若 Y
的数量为 \(T\),当 \(T\) 为奇数时无解,当 \(T\) 为偶数时块数一定为 \(\dfrac{T}{2}\)
性质二: 若一种划分方式是合法的,则任意两行栅栏中间的 Y
的数量为 \(2\times(w + 1)\) 且任意两列栅栏中间的 Y
的数量为 \(2\times(h+1)\)
性质三: \((h+1) \times (w+1) = T\)
这三条性质也都很简单,所以应该不需要证明。
可以发现上面这三条性质很强,可以将答案限制在一个很小的范围里,而且对于求可能的划分方案也是很方便的,所以只需要求出可能的划分方式然后暴力判一下就可以了。
具体也就是直接去枚举 \(h\),然后根据性质二就可以得到用了多少列,然后判断一下是不是等于 \(w\) 就好了,最后如果都符合再去暴力判断这个方案是否是真的合法。
时间复杂度是一个低于 \(O(n^2\sqrt{n})\) 的值