#1405. 黑白棋子

黑白棋子

黑白棋子

题目描述

有一个nnmm列的棋盘。棋盘的每个格子上要么是空,要么是一个黑色或白色的棋子。

我们现在将这个棋盘竖立起来,在游戏的任意时刻,这个棋盘都受到重力,满足不在最后一行的棋子下方都有棋子。

开始,棋盘上有一些棋子(但不一定是满的)。每一轮,玩家可以选择一个棋子AA,然后将所有和棋子AA在同一列的同一颜色连续段的棋子BB全部消除(不包括AA本身)。所有AABB在同一颜色连续段即AABB颜色相同,且该列在AABB之间棋子均与AA同色。

若消除了至少一个棋子,那么消除成功,之后棋子AA本身将反色(黑色变白色,白色变黑色),接着所有棋子向下掉落直到棋子落到最下方为止(棋子的相对顺序不变);反之,如果没有棋子被消除,那么消除失败,棋盘不会有任何变化。

当所有棋子无法被消除时,游戏结束。

给定初始棋盘,请计算最少需要进行几轮消除才能使游戏结束。

输入格式

第一行包含两个正整数nnmm,中间由一个空格隔开,表示棋盘为nnmm列。

接下来mm行,每行包含一个长度不超过nn的非空字符串,依次描述每一列从下到上的棋子,字符串只含字符0011,若第ii个字符为00,表示该列从下往上第ii个棋子为黑色,反之,若字符为11,表示棋子为白色。

输出格式

输出仅一行,包含一个整数,表示使游戏结束的最少消除轮数。

数据范围与提示

数据范围 约束条件
对于30%30\%的数据 n10n \leq 10m5m \leq 5
对于60%60\%的数据 n30n \leq 30m20m \leq 20
对于80%80\%的数据 n300n \leq 300m50m \leq 50
对于100%100\%的数据 n104n \leq 10^{4}m100m \leq 100

样例

4 3
10
1110
0100
5

说明

至少需要55轮消除,一种方案为依次选择:

  • 22列从下往上第22个棋子
  • 33列从下往上第44个棋子
  • 22列从下往上第11个棋子
  • 33列从下往上第22个棋子
  • 33列从下往上第22个棋子

注意最后两轮的消除是不一样的。

4 3
10
1110
0100
5

说明

初始时就无法消除任何棋子,故答案为00

见eliminate.in 
见eliminate.ans