NOP

Posted on 2022-12-09 16:08  Capterlliar  阅读(115)  评论(0编辑  收藏  举报

N. Bring Balance

题意:给出一个括号序列,每次操作可以反转一段连续的区间。求最少的操作次数以及方案,使得这个括号序列合法。

解:数形结合(?)

先试了下有没有可能分组后计算操作,发现组和组之间合并不太可能,pass。套路地将左括号视为+1,右括号视为-1,考虑反转操作,就是将一段+1-1翻过来。求原序列前缀和,发现要消除小于0的部分。很自然地画了一个折线图,摸了两个例子后发现这个操作映射到图像上是先垂直翻转再水平翻转。乱画一个复杂一点的折线再翻转一下发现这个操作实际上可以抬高或降低x轴(再次建议XCPC允许使用PS),于是想到可以选择最高点,把左右两边的x轴提上去,这样可以保证2次操作满足要求;同理,可以贪心地选择两个高点包含所有小于零的部分,看看翻转一下能否满足要求。

 

O. Ideal Farm

题意:有s个球,放n个盒子里,要求每个盒子都有球。问是否存在一种放法,使得任意一段连续的盒子里球数量之和不为k。

解:还挺简单的?首先给每个盒子里放一个球,然后给k的倍数的盒子里放大于等于k+1个球,这样用球最少。如果球不够,那么不存在。

P. The Winter Hike

题意:给出一个2n*2n的方阵,已知你的朋友站满了左上角n*n的方阵,现在你要通过一些操作把你的朋友们移到右下角n*n的方阵上去,每次操作可以把一行或一列的朋友循环左移/右移/上移/下移。遗憾的是有些格子有雪,你的朋友经过雪就会生病,但你可以花费一个代价把一个格子里的雪铲除。求把所有朋友进行任意次操作后健康地移到右下角花费的代价。

解:首先右下角的雪肯定要扫。乍一看有点像dp,但朋友们会被移得非常散乱,没法dp。观察一下发现只要有一个朋友能到达右下角,那所有的朋友都可以走一样的路线,考虑找一条代价最小的路。我们管第一个走到右下角的朋友叫友人A。观察一下样例,A如果站在右下角的话,走一个格子就可以到达目的地,有两种选择。再看样例4,发现除了右下角之外没有额外花费,原来是循环上移一个后可以走没有雪的地方。继续分析。A肯定是站在边缘的,他的目的地是右下角的边缘。考虑建图跑最短路,n2条边,跑4n遍,看起来不是很合理的样子。但A要到达右下角一定是从边角进入,这样一共有4个入口,加上循环移动是8个。而A要到达这8个入口,如果他站在边角,是不需要花费代价的,于是我们给这八个点取最小值就可以了。