【题解】ARC157 A-D

因为有的题代码没写出来,所以代码就先咕咕咕了。

A.XXYYX

题目分析:

可以发现每一个 XY 必然伴随着出现一次 YX,当然可能会有一个 XY 没有伴随的 YX 的。
而且若必须存在 XXYY 而不存在 XYYX 的则无解。
所以就根据上述的两个条件判一下就好了。

B.XYYYX

题目分析:

我们设字符串中 x 的数量为 cnt,则若 k>cnt,最优一定是全部把 x 变成 y 之后然后再删除 y,否则最优一定是只是将 x 变成 y
考虑分类讨论。
k>cnt:那么我们最优的删除 y 的办法肯定是每次删除一段最长的 y,因为每当我们删除一段的时候,第一个删除的数造成 2 的代价以后的数造成 1 的代价,所以要尽可能少出现 2 的代价。
kcnt:那么我们的最优的添加一定是每次添加一段最短的 x,因为每次添加完一段 x,最后一个添加的会造成 2 的贡献。

C.YY Square

题目分析:

显然需要将平方的代价化简一下,假设某一条路径有 x 对连续的 y,那么多了一个 y 后贡献就是 x2x2+2×x+1
考虑如果所有的路径放在一起维护,x2 就是原来的答案,2×x 就是路径长度的和,1 就是路径条数。
所以只要维护好了这些信息就可以轻松地做到多一个 y 的贡献,当然如果是没了 y 贡献就更简单了,就是 0
那么就直接 bfs 一遍这个网格图,然后维护一下就好了。

D.YY Garden

题目分析:

(典型的看了题解就会,自己做就是不会)
这个题其实就是几个关键的性质,下面假设 h 为用了多少行栅栏,w 为用了多少列栅栏。

性质一:Y 的数量为 T,当 T 为奇数时无解,当 T 为偶数时块数一定为 T2
性质二: 若一种划分方式是合法的,则任意两行栅栏中间的 Y 的数量为 2×(w+1) 且任意两列栅栏中间的 Y 的数量为 2×(h+1)
性质三: (h+1)×(w+1)=T

这三条性质也都很简单,所以应该不需要证明。
可以发现上面这三条性质很强,可以将答案限制在一个很小的范围里,而且对于求可能的划分方案也是很方便的,所以只需要求出可能的划分方式然后暴力判一下就可以了。
具体也就是直接去枚举 h,然后根据性质二就可以得到用了多少列,然后判断一下是不是等于 w 就好了,最后如果都符合再去暴力判断这个方案是否是真的合法。
时间复杂度是一个低于 O(n2n) 的值

posted @   linyihdfj  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示